diff options
Diffstat (limited to 'zebra/zebra_l2.c')
| -rw-r--r-- | zebra/zebra_l2.c | 232 | 
1 files changed, 108 insertions, 124 deletions
diff --git a/zebra/zebra_l2.c b/zebra/zebra_l2.c index b71b96a18b..5d059a4502 100644 --- a/zebra/zebra_l2.c +++ b/zebra/zebra_l2.c @@ -49,111 +49,101 @@  /* static function declarations */  /* Private functions */ -static void -map_slaves_to_bridge (struct interface *br_if, int link) +static void map_slaves_to_bridge(struct interface *br_if, int link)  { -  struct vrf *vrf; -  struct listnode *node; -  struct interface *ifp; - -  RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) -    { -      for (ALL_LIST_ELEMENTS_RO (vrf->iflist, node, ifp)) -        { -          struct zebra_if *zif; -          struct zebra_l2info_brslave *br_slave; - -          if (ifp->ifindex == IFINDEX_INTERNAL || -              !ifp->info) -            continue; -          if (!IS_ZEBRA_IF_BRIDGE_SLAVE (ifp)) -            continue; - -          /* NOTE: This assumes 'zebra_l2info_brslave' is the first field -           * for any L2 interface. -           */ -          zif = (struct zebra_if *) ifp->info; -          br_slave = &zif->brslave_info; - -          if (link) -            { -              if (br_slave->bridge_ifindex == br_if->ifindex) -                br_slave->br_if = br_if; -            } -          else -            { -              if (br_slave->br_if == br_if) -                br_slave->br_if = NULL; -            } -        } -    } +	struct vrf *vrf; +	struct listnode *node; +	struct interface *ifp; + +	RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name) +	{ +		for (ALL_LIST_ELEMENTS_RO(vrf->iflist, node, ifp)) { +			struct zebra_if *zif; +			struct zebra_l2info_brslave *br_slave; + +			if (ifp->ifindex == IFINDEX_INTERNAL || !ifp->info) +				continue; +			if (!IS_ZEBRA_IF_BRIDGE_SLAVE(ifp)) +				continue; + +			/* NOTE: This assumes 'zebra_l2info_brslave' is the +			 * first field +			 * for any L2 interface. +			 */ +			zif = (struct zebra_if *)ifp->info; +			br_slave = &zif->brslave_info; + +			if (link) { +				if (br_slave->bridge_ifindex == br_if->ifindex) +					br_slave->br_if = br_if; +			} else { +				if (br_slave->br_if == br_if) +					br_slave->br_if = NULL; +			} +		} +	}  }  /* Public functions */ -void -zebra_l2_map_slave_to_bridge (struct zebra_l2info_brslave *br_slave) +void zebra_l2_map_slave_to_bridge(struct zebra_l2info_brslave *br_slave)  { -  struct interface *br_if; +	struct interface *br_if; -  /* TODO: Handle change of master */ -  br_if = if_lookup_by_index_per_ns (zebra_ns_lookup (NS_DEFAULT), -                                     br_slave->bridge_ifindex); -  if (br_if) -    br_slave->br_if = br_if; +	/* TODO: Handle change of master */ +	br_if = if_lookup_by_index_per_ns(zebra_ns_lookup(NS_DEFAULT), +					  br_slave->bridge_ifindex); +	if (br_if) +		br_slave->br_if = br_if;  } -void -zebra_l2_unmap_slave_from_bridge (struct zebra_l2info_brslave *br_slave) +void zebra_l2_unmap_slave_from_bridge(struct zebra_l2info_brslave *br_slave)  { -  br_slave->br_if = NULL; +	br_slave->br_if = NULL;  }  /*   * Handle Bridge interface add or update. Update relevant info,   * map slaves (if any) to the bridge.   */ -void -zebra_l2_bridge_add_update (struct interface *ifp, -                            struct zebra_l2info_bridge *bridge_info, -                            int add) +void zebra_l2_bridge_add_update(struct interface *ifp, +				struct zebra_l2info_bridge *bridge_info, +				int add)  { -  struct zebra_if *zif; +	struct zebra_if *zif; -  zif = ifp->info; -  assert(zif); +	zif = ifp->info; +	assert(zif); -  /* Copy over the L2 information. */ -  memcpy (&zif->l2info.br, bridge_info, sizeof (*bridge_info)); +	/* Copy over the L2 information. */ +	memcpy(&zif->l2info.br, bridge_info, sizeof(*bridge_info)); -  /* Link all slaves to this bridge */ -  map_slaves_to_bridge (ifp, 1); +	/* Link all slaves to this bridge */ +	map_slaves_to_bridge(ifp, 1);  }  /*   * Handle Bridge interface delete.   */ -void -zebra_l2_bridge_del (struct interface *ifp) +void zebra_l2_bridge_del(struct interface *ifp)  { -  /* Unlink all slaves to this bridge */ -  map_slaves_to_bridge (ifp, 0); +	/* Unlink all slaves to this bridge */ +	map_slaves_to_bridge(ifp, 0);  }  /*   * Update L2 info for a VLAN interface. Only relevant parameter is the   * VLAN Id and this cannot change.   */ -void -zebra_l2_vlanif_update (struct interface *ifp, -                        struct zebra_l2info_vlan *vlan_info) +void zebra_l2_vlanif_update(struct interface *ifp, +			    struct zebra_l2info_vlan *vlan_info)  { -  struct zebra_if *zif; +	struct zebra_if *zif; -  zif = ifp->info; -  assert(zif); +	zif = ifp->info; +	assert(zif); -  /* Copy over the L2 information. */ -  memcpy (&zif->l2info.vl, vlan_info, sizeof (*vlan_info)); +	/* Copy over the L2 information. */ +	memcpy(&zif->l2info.vl, vlan_info, sizeof(*vlan_info));  }  /* @@ -162,60 +152,55 @@ zebra_l2_vlanif_update (struct interface *ifp,   * function. Upon update, the params of interest are the local tunnel   * IP and VLAN mapping, but the latter is handled separately.   */ -void -zebra_l2_vxlanif_add_update (struct interface *ifp, -                             struct zebra_l2info_vxlan *vxlan_info, -                             int add) +void zebra_l2_vxlanif_add_update(struct interface *ifp, +				 struct zebra_l2info_vxlan *vxlan_info, int add)  { -  struct zebra_if *zif; -  struct in_addr old_vtep_ip; +	struct zebra_if *zif; +	struct in_addr old_vtep_ip; -  zif = ifp->info; -  assert(zif); +	zif = ifp->info; +	assert(zif); -  if (add) -    { -      memcpy (&zif->l2info.vxl, vxlan_info, sizeof (*vxlan_info)); -      zebra_vxlan_if_add (ifp); -      return; -    } +	if (add) { +		memcpy(&zif->l2info.vxl, vxlan_info, sizeof(*vxlan_info)); +		zebra_vxlan_if_add(ifp); +		return; +	} -  old_vtep_ip = zif->l2info.vxl.vtep_ip; -  if (IPV4_ADDR_SAME(&old_vtep_ip, &vxlan_info->vtep_ip)) -    return; +	old_vtep_ip = zif->l2info.vxl.vtep_ip; +	if (IPV4_ADDR_SAME(&old_vtep_ip, &vxlan_info->vtep_ip)) +		return; -  zif->l2info.vxl.vtep_ip = vxlan_info->vtep_ip; -  zebra_vxlan_if_update (ifp, ZEBRA_VXLIF_LOCAL_IP_CHANGE); +	zif->l2info.vxl.vtep_ip = vxlan_info->vtep_ip; +	zebra_vxlan_if_update(ifp, ZEBRA_VXLIF_LOCAL_IP_CHANGE);  }  /*   * Handle change to VLAN to VNI mapping.   */ -void -zebra_l2_vxlanif_update_access_vlan (struct interface *ifp, -                                     vlanid_t access_vlan) +void zebra_l2_vxlanif_update_access_vlan(struct interface *ifp, +					 vlanid_t access_vlan)  { -  struct zebra_if *zif; -  vlanid_t old_access_vlan; +	struct zebra_if *zif; +	vlanid_t old_access_vlan; -  zif = ifp->info; -  assert(zif); +	zif = ifp->info; +	assert(zif); -  old_access_vlan = zif->l2info.vxl.access_vlan; -  if (old_access_vlan == access_vlan) -    return; +	old_access_vlan = zif->l2info.vxl.access_vlan; +	if (old_access_vlan == access_vlan) +		return; -  zif->l2info.vxl.access_vlan = access_vlan; -  zebra_vxlan_if_update (ifp, ZEBRA_VXLIF_VLAN_CHANGE); +	zif->l2info.vxl.access_vlan = access_vlan; +	zebra_vxlan_if_update(ifp, ZEBRA_VXLIF_VLAN_CHANGE);  }  /*   * Handle VxLAN interface delete.   */ -void -zebra_l2_vxlanif_del (struct interface *ifp) +void zebra_l2_vxlanif_del(struct interface *ifp)  { -  zebra_vxlan_if_del (ifp); +	zebra_vxlan_if_del(ifp);  }  /* @@ -223,29 +208,28 @@ zebra_l2_vxlanif_del (struct interface *ifp)   * NOTE: It is currently assumped that an interface has to be unmapped   * from a bridge before it can be mapped to another bridge.   */ -void -zebra_l2if_update_bridge_slave (struct interface *ifp, -                                ifindex_t bridge_ifindex) +void zebra_l2if_update_bridge_slave(struct interface *ifp, +				    ifindex_t bridge_ifindex)  { -  struct zebra_if *zif; -  ifindex_t old_bridge_ifindex; +	struct zebra_if *zif; +	ifindex_t old_bridge_ifindex; -  zif = ifp->info; -  assert(zif); +	zif = ifp->info; +	assert(zif); -  old_bridge_ifindex = zif->brslave_info.bridge_ifindex; -  if (old_bridge_ifindex == bridge_ifindex) -    return; +	old_bridge_ifindex = zif->brslave_info.bridge_ifindex; +	if (old_bridge_ifindex == bridge_ifindex) +		return; -  zif->brslave_info.bridge_ifindex = bridge_ifindex; +	zif->brslave_info.bridge_ifindex = bridge_ifindex; -  /* Set up or remove link with master */ -  if (bridge_ifindex != IFINDEX_INTERNAL) -    zebra_l2_map_slave_to_bridge (&zif->brslave_info); -  else if (old_bridge_ifindex != IFINDEX_INTERNAL) -    zebra_l2_unmap_slave_from_bridge (&zif->brslave_info); +	/* Set up or remove link with master */ +	if (bridge_ifindex != IFINDEX_INTERNAL) +		zebra_l2_map_slave_to_bridge(&zif->brslave_info); +	else if (old_bridge_ifindex != IFINDEX_INTERNAL) +		zebra_l2_unmap_slave_from_bridge(&zif->brslave_info); -  /* In the case of VxLAN, invoke the handler for EVPN. */ -  if (zif->zif_type == ZEBRA_IF_VXLAN) -    zebra_vxlan_if_update (ifp, ZEBRA_VXLIF_MASTER_CHANGE); +	/* In the case of VxLAN, invoke the handler for EVPN. */ +	if (zif->zif_type == ZEBRA_IF_VXLAN) +		zebra_vxlan_if_update(ifp, ZEBRA_VXLIF_MASTER_CHANGE);  }  | 
