On Tue, Nov 20, 2012 at 1:14 PM, Ben Pfaff <[email protected]> wrote:
>
> On Tue, Nov 20, 2012 at 03:40:50AM -0800, Gurucharan Shetty wrote:
> > From: Gurucharan Shetty <[email protected]>
> >
> > Currently, the 'ofport' column in Interface table is
> > ephemeral and is populated by vswitchd everytime it is
> > started or when a new interface is created with vswitchd
> > running.
> >
> > Making it persistent lets vswitchd try and assign the
> > same ofport number to a particular interface across
> > restarts. This is just a fallback option when
> > 'ofport_request' column is empty.
> >
> > Signed-off-by: Gurucharan Shetty <[email protected]>
>
> I know that you told me this in person just yesterday, but can you
> remind me why we need to make ofport a read/write column?

If I do not do it, this is what happens.
>From my notes (sorry for the cryptic messages):

* Start openvswitch and create a few internal interfaces.
* Stop openvswitch, remove kernel module, re-insmod it and start ovsdb-server.
* Start ovs-vswitchd in gdb.

* Code stores the value of ofport  in the "struct if_cfg -> ofport"
datastructure for each interface.
* Go through each interface, and through iface_clear_db_record make
its ofport as -1. Commit it to DB. Values can actually be seen in the
database at this point and all are -1 for ofport column (with
ovs-vsctl get).

* Call "iface_create" for each interface.
 - For the first interface, if_cfg->cfg->ofport is -1. And when
iface_set_ofp_port() is called with a +ve
value (ofport value), ovsdb_idl_txn_write is called and row->new is
set because the 2 values of ofport is different(one is -1 and the
other +ve).

 - ovsdb_idl_txn_commit is called which commits this +ve value to DB.

 - In ovsdb_idl_txn_commit, ovsdb_idl_txn_disassemble is called which
changes all the rows associated with "all other" interfaces to their
"old" values (the old values have ofport as +ve) in the memory.

  -iface_create is called for second interface. Now,
if_cfg->cfg->ofport is +ve and we are setting the same value with
iface_set_ofp_port(). Since values are same, DB is not updated.

- So this creates a situation where except for one interface, all
interfaces have their ofport set as "-1".
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev

Reply via email to