[ovs-dev] [PATCH 3/3] tests: Avoid race conditions, by letting the kernel choose ports to bind.

Ben Pfaff blp at nicira.com
Thu Apr 4 01:47:10 UTC 2013


On Wed, Apr 03, 2013 at 05:01:40PM -0700, Neil Mckee wrote:
> "parse-listening-port" seems to return the port that the server was
> told to listen on(?)  

Yes, it returns the port that the server is listening on.

> But that bears no relation to the UDP port that sFlow or NetFlow might
> be sent out to.  The way you have it now will probably work, but only
> by accident: because you can usually open UDP port X at the same time
> as someone else has opened TCP port X.
> 
> Or did I miss something?

I hope so.  Let me walk through one of the tests after this commit.

This starts up ovs-vswitchd and ovsdb-server:

    AT_SETUP([ofproto-dpif - NetFlow flow expiration])

    OVS_VSWITCHD_START([set Bridge br0 fail-mode=standalone])
    ADD_OF_PORTS([br0], 1, 2)

This starts test-netflow listening on some kernel-selected (UDP) port
and then stores the port that it's actually listening on in
NETFLOW_PORT:

    ON_EXIT([kill `cat test-netflow.pid`])
    AT_CHECK([test-netflow --log-file --detach --no-chdir --pidfile 0:127.0.0.1 > netflow.log], [0], [], [ignore])
    AT_CAPTURE_FILE([netflow.log])
    NETFLOW_PORT=`parse_listening_port < test-netflow.log`

This configures the OVS netflow implementation to send its records to
localhost on the port that we just determined test-netflow was listening
on:

    ovs-vsctl \
       set Bridge br0 netflow=@nf -- \
       --id=@nf create NetFlow targets=\"127.0.0.1:$NETFLOW_PORT\" \
         engine_id=1 engine_type=2 active_timeout=30 add-id-to-interface=false

and the rest of the test just tests stuff.

Does it make sense?

Thanks,

Ben.



More information about the dev mailing list