[ovs-discuss] Incorrect Spanning tree status
Kmindg G
kmindg at gmail.com
Thu Feb 20 05:13:54 UTC 2014
On Thu, Feb 20, 2014 at 12:20 PM, Vasu Dasari <vdasari at gmail.com> wrote:
> Thanks Ben. It works. Just a small typo in your patch.
>
> + port->pp.state = ((port->pp.state & ~OFPUTIL_PS_LINK_DOWN)
>
> + | (pp->state & OFPUTIL_PS_LINK_DOWN));
>
>
> Can you please tell me how is the ofproto_modified() function is called(what
> is the event which triggers this).
When stp state changes, stp_set_port_state is called which calls
seq_change(connectivity_seq_get())
afterwards. Then ofproto_run finds that connectivity seq has been
changed, it calls update_port which
calls ofport_modified afterwards.
>
> Thanks,
> -Vasu
>
>
> On Wed, Feb 19, 2014 at 2:45 PM, Ben Pfaff <blp at nicira.com> wrote:
>>
>> On Mon, Feb 17, 2014 at 06:58:58PM -0500, Vasu Dasari wrote:
>> > On debugging this issue further, I found that, ofproto's STP state bits
>> > are
>> > getting updated correctly because of following call stack:
>> >
>> > #0 ofproto_port_set_state (port=0x82395c0,
>> > state=OFPUTIL_PS_STP_FORWARD)
>> > at ../ofproto/ofproto.c:2267
>> > #1 0x0806d659 in update_stp_port_state (ofport=0x82395b8)
>> > at ../ofproto/ofproto-dpif.c:1866
>> > #2 0x0806da37 in stp_run (ofproto=0x822c628) at
>> > ../ofproto/ofproto-dpif.c:1969
>> > #3 0x0806c1ba in run (ofproto_=0x822c630) at
>> > ../ofproto/ofproto-dpif.c:1286
>> > #4 0x0805d51f in ofproto_run (p=0x822c630) at ../ofproto/ofproto.c:1429
>> > #5 0x08050ece in bridge_run__ () at ../vswitchd/bridge.c:2275
>> > #6 0x08051032 in bridge_run () at ../vswitchd/bridge.c:2326
>> > #7 0x08055a99 in main (argc=4, argv=0xbffff224) at
>> > ../vswitchd/ovs-vswitchd.c:118
>> >
>> > but the same STP state is getting overwritten by following call stack,
>> > at a
>> > later point in time:
>> >
>> > #0 ofport_modified (port=0x822c290, pp=0xbfffefb4) at
>> > ../ofproto/ofproto.c:2244
>> > #1 0x0805f887 in update_port (ofproto=0x821f090, name=0x8200958
>> > "atl0-eth2")
>> > at ../ofproto/ofproto.c:2423
>> > #2 0x0805d867 in ofproto_run (p=0x821f090) at ../ofproto/ofproto.c:1495
>> > #3 0x08050ece in bridge_run__ () at ../vswitchd/bridge.c:2275
>> > #4 0x08051032 in bridge_run () at ../vswitchd/bridge.c:2326
>> > #5 0x08055a99 in main (argc=4, argv=0xbffff224) at
>> > ../vswitchd/ovs-vswitchd.c:118
>> >
>> > This is the reason why, I am seeing the "state to be 0".
>>
>> It looks very much to me like ofport_modified() simply shouldn't be
>> messing around with any of the state bits other than
>> OFPUTIL_PS_LINK_DOWN. Can you try this patch? If it solves the
>> problem I'll write it up properly.
>>
>> diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
>> index 48e10ca..f544c68 100644
>> --- a/ofproto/ofproto.c
>> +++ b/ofproto/ofproto.c
>> @@ -2244,7 +2244,8 @@ ofport_modified(struct ofport *port, struct
>> ofputil_phy_port *pp)
>> memcpy(port->pp.hw_addr, pp->hw_addr, ETH_ADDR_LEN);
>> port->pp.config = ((port->pp.config & ~OFPUTIL_PC_PORT_DOWN)
>> | (pp->config & OFPUTIL_PC_PORT_DOWN));
>> - port->pp.state = pp->state;
>> + port->pp.state = ((port->ps.state & ~OFPUTIL_PS_LINK_DOWN)
>> + | (pp->state & OFPUTIL_PS_LINK_DOWN));
>> port->pp.curr = pp->curr;
>> port->pp.advertised = pp->advertised;
>> port->pp.supported = pp->supported;
>
>
>
> _______________________________________________
> discuss mailing list
> discuss at openvswitch.org
> http://openvswitch.org/mailman/listinfo/discuss
>
More information about the discuss
mailing list