Thx, applied both patches to master and branch-2.3.
On Wed, Aug 13, 2014 at 6:49 PM, Ethan Jackson <et...@nicira.com> wrote: > Acked-by: Ethan Jackson <et...@nicira.com> > > > On Mon, Aug 11, 2014 at 6:34 PM, Alex Wang <al...@nicira.com> wrote: > > This commit adds options for configuring the MAC addresses > > in BFD state machine. Therein, the "bfd_local_src_mac" and > > "bfd_local_dst_mac" configure the MAC address of sent BFD > > packets. The "bfd_remote_dst_mac" configure the matching > > of MAC address on recevied BFD packets. > > > > Signed-off-by: Alex Wang <al...@nicira.com> > > > > --- > > PATCH -> V2: > > - simplify the code. > > --- > > lib/bfd.c | 47 > +++++++++++++++++++++++++++++++++-------------- > > vswitchd/vswitch.xml | 23 +++++++++++++++++++---- > > 2 files changed, 52 insertions(+), 18 deletions(-) > > > > diff --git a/lib/bfd.c b/lib/bfd.c > > index 9069582..5c86451 100644 > > --- a/lib/bfd.c > > +++ b/lib/bfd.c > > @@ -169,8 +169,10 @@ struct bfd { > > > > uint32_t rmt_disc; /* bfd.RemoteDiscr. */ > > > > - uint8_t eth_dst[ETH_ADDR_LEN];/* Ethernet destination address. */ > > - bool eth_dst_set; /* 'eth_dst' set through database. */ > > + uint8_t local_eth_src[ETH_ADDR_LEN]; /* Local eth src address. */ > > + uint8_t local_eth_dst[ETH_ADDR_LEN]; /* Local eth dst address. */ > > + > > + uint8_t rmt_eth_dst[ETH_ADDR_LEN]; /* Remote eth dst address. */ > > > > ovs_be32 ip_src; /* IPv4 source address. */ > > ovs_be32 ip_dst; /* IPv4 destination address. */ > > @@ -388,8 +390,6 @@ bfd_configure(struct bfd *bfd, const char *name, > const struct smap *cfg, > > > > bfd_set_state(bfd, STATE_DOWN, DIAG_NONE); > > > > - memcpy(bfd->eth_dst, eth_addr_bfd, ETH_ADDR_LEN); > > - > > bfd_status_changed(bfd); > > } > > > > @@ -440,13 +440,25 @@ bfd_configure(struct bfd *bfd, const char *name, > const struct smap *cfg, > > need_poll = true; > > } > > > > - hwaddr = smap_get(cfg, "bfd_dst_mac"); > > - if (hwaddr && eth_addr_from_string(hwaddr, ea) && > !eth_addr_is_zero(ea)) { > > - memcpy(bfd->eth_dst, ea, ETH_ADDR_LEN); > > - bfd->eth_dst_set = true; > > - } else if (bfd->eth_dst_set) { > > - memcpy(bfd->eth_dst, eth_addr_bfd, ETH_ADDR_LEN); > > - bfd->eth_dst_set = false; > > + hwaddr = smap_get(cfg, "bfd_local_src_mac"); > > + if (hwaddr && eth_addr_from_string(hwaddr, ea)) { > > + memcpy(bfd->local_eth_src, ea, ETH_ADDR_LEN); > > + } else { > > + memset(bfd->local_eth_src, 0, ETH_ADDR_LEN); > > + } > > + > > + hwaddr = smap_get(cfg, "bfd_local_dst_mac"); > > + if (hwaddr && eth_addr_from_string(hwaddr, ea)) { > > + memcpy(bfd->local_eth_dst, ea, ETH_ADDR_LEN); > > + } else { > > + memset(bfd->local_eth_dst, 0, ETH_ADDR_LEN); > > + } > > + > > + hwaddr = smap_get(cfg, "bfd_remote_dst_mac"); > > + if (hwaddr && eth_addr_from_string(hwaddr, ea)) { > > + memcpy(bfd->rmt_eth_dst, ea, ETH_ADDR_LEN); > > + } else { > > + memset(bfd->rmt_eth_dst, 0, ETH_ADDR_LEN); > > } > > > > ip_src = smap_get(cfg, "bfd_src_ip"); > > @@ -600,8 +612,14 @@ bfd_put_packet(struct bfd *bfd, struct ofpbuf *p, > > > > ofpbuf_reserve(p, 2); /* Properly align after the ethernet header. > */ > > eth = ofpbuf_put_uninit(p, sizeof *eth); > > - memcpy(eth->eth_src, eth_src, ETH_ADDR_LEN); > > - memcpy(eth->eth_dst, bfd->eth_dst, ETH_ADDR_LEN); > > + memcpy(eth->eth_src, > > + eth_addr_is_zero(bfd->local_eth_src) ? eth_src > > + : bfd->local_eth_src, > > + ETH_ADDR_LEN); > > + memcpy(eth->eth_dst, > > + eth_addr_is_zero(bfd->local_eth_dst) ? eth_addr_bfd > > + : bfd->local_eth_dst, > > + ETH_ADDR_LEN); > > eth->eth_type = htons(ETH_TYPE_IP); > > > > ip = ofpbuf_put_zeros(p, sizeof *ip); > > @@ -657,7 +675,8 @@ bfd_should_process_flow(const struct bfd *bfd_, > const struct flow *flow, > > bool check_tnl_key; > > > > memset(&wc->masks.dl_dst, 0xff, sizeof wc->masks.dl_dst); > > - if (bfd->eth_dst_set && memcmp(bfd->eth_dst, flow->dl_dst, > ETH_ADDR_LEN)) { > > + if (!eth_addr_is_zero(bfd->rmt_eth_dst) > > + && memcmp(bfd->rmt_eth_dst, flow->dl_dst, ETH_ADDR_LEN)) { > > return false; > > } > > > > diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml > > index bff8fb6..ff9be17 100644 > > --- a/vswitchd/vswitch.xml > > +++ b/vswitchd/vswitch.xml > > @@ -2081,12 +2081,27 @@ > > tunnel key. > > </column> > > > > - <column name="bfd" key="bfd_dst_mac"> > > + <column name="bfd" key="bfd_local_src_mac"> > > Set to an Ethernet address in the form > > > <var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var> > > - to set the MAC used as destination for transmitted BFD packets > and > > - expected as destination for received BFD packets. The default > is > > - <code>00:23:20:00:00:01</code>. > > + to set the MAC used as source for transmitted BFD packets. The > > + default is the mac address of the BFD enabled interface. > > + </column> > > + > > + <column name="bfd" key="bfd_local_dst_mac"> > > + Set to an Ethernet address in the form > > + > <var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var> > > + to set the MAC used as destination for transmitted BFD > packets. The > > + default is <code>00:23:20:00:00:01</code>. > > + </column> > > + > > + <column name="bfd" key="bfd_remoe_dst_mac"> > > + Set to an Ethernet address in the form > > + > <var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var> > > + to set the MAC used for checking the destination of received > BFD packets. > > + Packets with different destination MAC will not be considered > as BFD packets. > > + If not specified the destination MAC address of received BFD > packets > > + are not checked. > > </column> > > > > <column name="bfd" key="bfd_src_ip"> > > -- > > 1.7.9.5 > > > > _______________________________________________ > > dev mailing list > > dev@openvswitch.org > > http://openvswitch.org/mailman/listinfo/dev > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev