The patch makes sense, could we add some testing to make sure this is happening and ensure that we don't hit regressions later?
On Wed, Sep 20, 2017 at 5:12 PM, Guoshuai Li <[email protected]> wrote: > When sending a localnet port with vlan, the GARP packet needs push_vlan. > --- > > v2: > Add check vlan vaid. > Add update localnet vlan tag process. > > --- > ovn/controller/pinctrl.c | 16 +++++++++++++--- > 1 file changed, 13 insertions(+), 3 deletions(-) > > diff --git a/ovn/controller/pinctrl.c b/ovn/controller/pinctrl.c > index 469a35586..eb9276833 100644 > --- a/ovn/controller/pinctrl.c > +++ b/ovn/controller/pinctrl.c > @@ -1264,6 +1264,7 @@ struct garp_data { > long long int announce_time; /* Next announcement in ms. */ > int backoff; /* Backoff for the next announcement. */ > ofp_port_t ofport; /* ofport used to output this GARP. */ > + int64_t tag; /* vlan tag of this GARP packet. */ > }; > > /* Contains GARPs to be sent. */ > @@ -1286,7 +1287,7 @@ destroy_send_garps(void) > } > > static void > -add_garp(const char *name, ofp_port_t ofport, > +add_garp(const char *name, ofp_port_t ofport, int64_t tag, > const struct eth_addr ea, ovs_be32 ip) > { > struct garp_data *garp = xmalloc(sizeof *garp); > @@ -1295,6 +1296,7 @@ add_garp(const char *name, ofp_port_t ofport, > garp->announce_time = time_msec() + 1000; > garp->backoff = 1; > garp->ofport = ofport; > + garp->tag = tag; > shash_add(&send_garp_data, name, garp); > } > > @@ -1313,6 +1315,8 @@ send_garp_update(const struct sbrec_port_binding > *binding_rec, > } > ofp_port_t ofport = u16_to_ofp(simap_get(localnet_ofports, > ld->localnet_port->logical_ > port)); > + int64_t tag = ld->localnet_port->n_tag ? > + *(ld->localnet_port->tag) : 0xFFFF; > > volatile struct garp_data *garp = NULL; > /* Update GARP for NAT IP if it exists. Consider port bindings with > type > @@ -1331,8 +1335,9 @@ send_garp_update(const struct sbrec_port_binding > *binding_rec, > garp = shash_find_data(&send_garp_data, name); > if (garp) { > garp->ofport = ofport; > + garp->tag = tag; > } else { > - add_garp(name, ofport, laddrs->ea, > + add_garp(name, ofport, tag, laddrs->ea, > laddrs->ipv4_addrs[i].addr); > } > free(name); > @@ -1359,7 +1364,7 @@ send_garp_update(const struct sbrec_port_binding > *binding_rec, > continue; > } > > - add_garp(binding_rec->logical_port, ofport, > + add_garp(binding_rec->logical_port, ofport, tag, > laddrs.ea, laddrs.ipv4_addrs[0].addr); > > destroy_lport_addresses(&laddrs); > @@ -1389,6 +1394,11 @@ send_garp(struct garp_data *garp, long long int > current_time) > compose_arp(&packet, ARP_OP_REQUEST, garp->ea, eth_addr_zero, > true, garp->ipv4, garp->ipv4); > > + /* Compose a GARP request packet's vlan if exist. */ > + if (garp->tag >= 0 && garp->tag <= 4095) { > + eth_push_vlan(&packet, htons(ETH_TYPE_VLAN), htons(garp->tag)); > + } > + > /* Compose actions. The garp request is output on localnet ofport. */ > uint64_t ofpacts_stub[4096 / 8]; > struct ofpbuf ofpacts = OFPBUF_STUB_INITIALIZER(ofpacts_stub); > -- > 2.13.2.windows.1 > > _______________________________________________ > dev mailing list > [email protected] > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
