Looks good. --Justin
On Jun 3, 2013, at 1:51 PM, Ethan Jackson <[email protected]> wrote: > If ofproto decided to change the netdev of a particular ofport, > cfm_demand mode would improperly continue using the old netdev to > collect stats. > > Bug #17583. > Signed-off-by: Ethan Jackson <[email protected]> > --- > lib/cfm.c | 10 ++++++++++ > lib/cfm.h | 1 + > ofproto/ofproto-dpif.c | 4 ++++ > 3 files changed, 15 insertions(+) > > diff --git a/lib/cfm.c b/lib/cfm.c > index d16e2dd..4d4ebcb 100644 > --- a/lib/cfm.c > +++ b/lib/cfm.c > @@ -567,6 +567,16 @@ cfm_configure(struct cfm *cfm, const struct cfm_settings > *s) > return true; > } > > +/* Must be called when the netdev owned by 'cfm' should change. */ > +void > +cfm_set_netdev(struct cfm *cfm, const struct netdev *netdev) > +{ > + if (cfm->netdev != netdev) { > + netdev_close(cfm->netdev); > + cfm->netdev = netdev_ref(netdev); > + } > +} > + > /* Returns true if 'cfm' should process packets from 'flow'. */ > bool > cfm_should_process_flow(const struct cfm *cfm, const struct flow *flow) > diff --git a/lib/cfm.h b/lib/cfm.h > index eec9704..057da04 100644 > --- a/lib/cfm.h > +++ b/lib/cfm.h > @@ -71,6 +71,7 @@ bool cfm_should_send_ccm(struct cfm *); > void cfm_compose_ccm(struct cfm *, struct ofpbuf *packet, uint8_t eth_src[6]); > void cfm_wait(struct cfm *); > bool cfm_configure(struct cfm *, const struct cfm_settings *); > +void cfm_set_netdev(struct cfm *, const struct netdev *); > bool cfm_should_process_flow(const struct cfm *cfm, const struct flow *); > void cfm_process_heartbeat(struct cfm *, const struct ofpbuf *packet); > int cfm_get_fault(const struct cfm *); > diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c > index 7c3abec..13e2aad 100644 > --- a/ofproto/ofproto-dpif.c > +++ b/ofproto/ofproto-dpif.c > @@ -1904,6 +1904,10 @@ port_modified(struct ofport *port_) > if (port->bundle && port->bundle->bond) { > bond_slave_set_netdev(port->bundle->bond, port, port->up.netdev); > } > + > + if (port->cfm) { > + cfm_set_netdev(port->cfm, port->up.netdev); > + } > } > > static void > -- > 1.7.9.5 > > _______________________________________________ > dev mailing list > [email protected] > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
