Adding ovs dev
On 3/15/16, 4:28 PM, "Darrell Ball" <dlu...@gmail.com> wrote: >Signed-off-by: Darrell Ball <db...@vmware.com> >--- > ovn/controller/physical.c | 42 ++++++++++++++++++++++++++++++++++++++---- > 1 file changed, 38 insertions(+), 4 deletions(-) > >diff --git a/ovn/controller/physical.c b/ovn/controller/physical.c >index 657c3e2..5156a9b 100644 >--- a/ovn/controller/physical.c >+++ b/ovn/controller/physical.c >@@ -231,6 +231,7 @@ physical_run(struct controller_ctx *ctx, enum mf_field_id >mff_ovn_geneve, > /* Set up flows in table 0 for physical-to-logical translation and in > table > * 64 for logical-to-physical translation. */ > const struct sbrec_port_binding *binding; >+ const struct sbrec_physical_endpoint * phys_endpt_rec; > SBREC_PORT_BINDING_FOR_EACH (binding, ctx->ovnsb_idl) { > /* Find the OpenFlow port for the logical port, as 'ofport'. This is > * one of: >@@ -267,8 +268,28 @@ physical_run(struct controller_ctx *ctx, enum mf_field_id >mff_ovn_geneve, > } else { > ofport = u16_to_ofp(simap_get(&localvif_to_ofport, > binding->logical_port)); >- if (!strcmp(binding->type, "localnet") && ofport && binding->tag) >{ >- tag = *binding->tag; >+ >+ /* For localnet and gw logical ports without phys_endpt >+ * binding, a tag of 0 is the default */ >+ >+ /* gw logical port type added for illustrative purposes >+ * in this patch */ >+ >+ if ((!strcmp(binding->type, "localnet") || >+ (!strcmp(binding->type, "gw"))) && ofport && >+ binding->phys_endpts) { >+ >+ /* Use any phys_endpt for localnet if shared port >+ * name; if localnet port is unique name, then there is a >+ * single phys_endpt. >+ * gw logical ports have a single phys_endpt */ >+ phys_endpt_rec = binding->phys_endpts[0]; >+ >+ /* only single vlan encap is supported initially */ >+ if (phys_endpt_rec && (!strcmp(phys_endpt_rec->type, >"vlan"))) { >+ /* valid values verified on configuration */ >+ (void) str_to_int(phys_endpt_rec->ingress_encap, 10, >&tag); >+ } > } > } > >@@ -326,7 +347,13 @@ physical_run(struct controller_ctx *ctx, enum mf_field_id >mff_ovn_geneve, > /* Match a VLAN tag and strip it, including stripping priority > tags > * (e.g. VLAN ID 0). In the latter case we'll add a second flow > * for frames that lack any 802.1Q header later. */ >- if (tag || !strcmp(binding->type, "localnet")) { >+ >+ /* gw logical port type added for illustrative purposes >+ * in this patch */ >+ if (tag || >+ (!strcmp(binding->type, "localnet")) || >+ (!strcmp(binding->type, "gw"))) { >+ > match_set_dl_vlan(&match, htons(tag)); > ofpact_put_STRIP_VLAN(&ofpacts); > } >@@ -350,7 +377,13 @@ physical_run(struct controller_ctx *ctx, enum mf_field_id >mff_ovn_geneve, > ofctrl_add_flow(flow_table, OFTABLE_PHY_TO_LOG, > tag ? 150 : 100, &match, &ofpacts); > >- if (!tag && !strcmp(binding->type, "localnet")) { >+ /* gw logical port type added for illustrative purposes >+ * in this patch >+ */ >+ if (!tag && >+ ((!strcmp(binding->type, "localnet")) || >+ (!strcmp(binding->type, "gw")))) { >+ > /* Add a second flow for frames that lack any 802.1Q > * header. For these, drop the OFPACT_STRIP_VLAN > * action. */ >@@ -648,6 +681,7 @@ physical_run(struct controller_ctx *ctx, enum mf_field_id >mff_ovn_geneve, > * xxx Due to resubmitting to table 16, broadcasts will be re-sent to > * xxx all logical ports, including non-local ones which could cause > * xxx duplicate packets to be received by multiply-connected gateways. */ >+ > HMAP_FOR_EACH (tun, hmap_node, &tunnels) { > if (tun->type != VXLAN) { > continue; >-- >1.9.1 > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev