diff options
Diffstat (limited to 'bgpd/rfapi/vnc_export_table.c')
| -rw-r--r-- | bgpd/rfapi/vnc_export_table.c | 298 | 
1 files changed, 138 insertions, 160 deletions
diff --git a/bgpd/rfapi/vnc_export_table.c b/bgpd/rfapi/vnc_export_table.c index 5c7a64d3bb..bbdb59c125 100644 --- a/bgpd/rfapi/vnc_export_table.c +++ b/bgpd/rfapi/vnc_export_table.c @@ -1,4 +1,4 @@ -/*  +/*   *   * Copyright 2009-2016, LabN Consulting, L.L.C.   * @@ -33,182 +33,160 @@  #include "bgpd/rfapi/rfapi_import.h"  #include "bgpd/rfapi/vnc_debug.h" -struct route_node * -vnc_etn_get (struct bgp *bgp, vnc_export_type_t type, struct prefix *p) +struct route_node *vnc_etn_get(struct bgp *bgp, vnc_export_type_t type, +			       struct prefix *p)  { -  struct route_table *t = NULL; -  struct route_node *rn = NULL; -  afi_t afi; - -  if (!bgp || !bgp->rfapi) -    return NULL; - -  afi = family2afi (p->family); -  assert (afi == AFI_IP || afi == AFI_IP6); - -  switch (type) -    { -    case EXPORT_TYPE_BGP: -      if (!bgp->rfapi->rt_export_bgp[afi]) -        bgp->rfapi->rt_export_bgp[afi] = route_table_init (); -      t = bgp->rfapi->rt_export_bgp[afi]; -      break; - -    case EXPORT_TYPE_ZEBRA: -      if (!bgp->rfapi->rt_export_zebra[afi]) -        bgp->rfapi->rt_export_zebra[afi] = route_table_init (); -      t = bgp->rfapi->rt_export_zebra[afi]; -      break; -    } - -  if (t) -    rn = route_node_get (t, p); -  return rn; +	struct route_table *t = NULL; +	struct route_node *rn = NULL; +	afi_t afi; + +	if (!bgp || !bgp->rfapi) +		return NULL; + +	afi = family2afi(p->family); +	assert(afi == AFI_IP || afi == AFI_IP6); + +	switch (type) { +	case EXPORT_TYPE_BGP: +		if (!bgp->rfapi->rt_export_bgp[afi]) +			bgp->rfapi->rt_export_bgp[afi] = route_table_init(); +		t = bgp->rfapi->rt_export_bgp[afi]; +		break; + +	case EXPORT_TYPE_ZEBRA: +		if (!bgp->rfapi->rt_export_zebra[afi]) +			bgp->rfapi->rt_export_zebra[afi] = route_table_init(); +		t = bgp->rfapi->rt_export_zebra[afi]; +		break; +	} + +	if (t) +		rn = route_node_get(t, p); +	return rn;  } -struct route_node * -vnc_etn_lookup (struct bgp *bgp, vnc_export_type_t type, struct prefix *p) +struct route_node *vnc_etn_lookup(struct bgp *bgp, vnc_export_type_t type, +				  struct prefix *p)  { -  struct route_table *t = NULL; -  struct route_node *rn = NULL; -  afi_t afi; - -  if (!bgp || !bgp->rfapi) -    return NULL; - -  afi = family2afi (p->family); -  assert (afi == AFI_IP || afi == AFI_IP6); - -  switch (type) -    { -    case EXPORT_TYPE_BGP: -      if (!bgp->rfapi->rt_export_bgp[afi]) -        bgp->rfapi->rt_export_bgp[afi] = route_table_init (); -      t = bgp->rfapi->rt_export_bgp[afi]; -      break; - -    case EXPORT_TYPE_ZEBRA: -      if (!bgp->rfapi->rt_export_zebra[afi]) -        bgp->rfapi->rt_export_zebra[afi] = route_table_init (); -      t = bgp->rfapi->rt_export_zebra[afi]; -      break; -    } - -  if (t) -    rn = route_node_lookup (t, p); -  return rn; +	struct route_table *t = NULL; +	struct route_node *rn = NULL; +	afi_t afi; + +	if (!bgp || !bgp->rfapi) +		return NULL; + +	afi = family2afi(p->family); +	assert(afi == AFI_IP || afi == AFI_IP6); + +	switch (type) { +	case EXPORT_TYPE_BGP: +		if (!bgp->rfapi->rt_export_bgp[afi]) +			bgp->rfapi->rt_export_bgp[afi] = route_table_init(); +		t = bgp->rfapi->rt_export_bgp[afi]; +		break; + +	case EXPORT_TYPE_ZEBRA: +		if (!bgp->rfapi->rt_export_zebra[afi]) +			bgp->rfapi->rt_export_zebra[afi] = route_table_init(); +		t = bgp->rfapi->rt_export_zebra[afi]; +		break; +	} + +	if (t) +		rn = route_node_lookup(t, p); +	return rn;  } -struct vnc_export_info * -vnc_eti_get ( -    struct bgp		*bgp, -    vnc_export_type_t	etype, -    struct prefix	*p, -    struct peer		*peer, -    uint8_t		type, -    uint8_t		subtype) +struct vnc_export_info *vnc_eti_get(struct bgp *bgp, vnc_export_type_t etype, +				    struct prefix *p, struct peer *peer, +				    uint8_t type, uint8_t subtype)  { -  struct route_node *etn; -  struct vnc_export_info *eti; - -  etn = vnc_etn_get (bgp, etype, p); -  assert (etn); - -  for (eti = etn->info; eti; eti = eti->next) -    { -      if (peer == eti->peer && type == eti->type && subtype == eti->subtype) -        { - -          break; -        } -    } - -  if (eti) -    { -      route_unlock_node (etn); -    } -  else -    { -      eti = XCALLOC (MTYPE_RFAPI_ETI, sizeof (struct vnc_export_info)); -      assert (eti); -      eti->node = etn; -      eti->peer = peer; -      peer_lock (peer); -      eti->type = type; -      eti->subtype = subtype; -      eti->next = etn->info; -      etn->info = eti; -    } - -  return eti; +	struct route_node *etn; +	struct vnc_export_info *eti; + +	etn = vnc_etn_get(bgp, etype, p); +	assert(etn); + +	for (eti = etn->info; eti; eti = eti->next) { +		if (peer == eti->peer && type == eti->type +		    && subtype == eti->subtype) { + +			break; +		} +	} + +	if (eti) { +		route_unlock_node(etn); +	} else { +		eti = XCALLOC(MTYPE_RFAPI_ETI, sizeof(struct vnc_export_info)); +		assert(eti); +		eti->node = etn; +		eti->peer = peer; +		peer_lock(peer); +		eti->type = type; +		eti->subtype = subtype; +		eti->next = etn->info; +		etn->info = eti; +	} + +	return eti;  } -void -vnc_eti_delete (struct vnc_export_info *goner) +void vnc_eti_delete(struct vnc_export_info *goner)  { -  struct route_node *etn; -  struct vnc_export_info *eti; -  struct vnc_export_info *eti_prev = NULL; - -  etn = goner->node; - -  for (eti = etn->info; eti; eti_prev = eti, eti = eti->next) -    { -      if (eti == goner) -        break; -    } - -  if (!eti) -    { -      vnc_zlog_debug_verbose ("%s: COULDN'T FIND ETI", __func__); -      return; -    } - -  if (eti_prev) -    { -      eti_prev->next = goner->next; -    } -  else -    { -      etn->info = goner->next; -    } - -  peer_unlock (eti->peer); -  goner->node = NULL; -  XFREE (MTYPE_RFAPI_ETI, goner); - -  route_unlock_node (etn); +	struct route_node *etn; +	struct vnc_export_info *eti; +	struct vnc_export_info *eti_prev = NULL; + +	etn = goner->node; + +	for (eti = etn->info; eti; eti_prev = eti, eti = eti->next) { +		if (eti == goner) +			break; +	} + +	if (!eti) { +		vnc_zlog_debug_verbose("%s: COULDN'T FIND ETI", __func__); +		return; +	} + +	if (eti_prev) { +		eti_prev->next = goner->next; +	} else { +		etn->info = goner->next; +	} + +	peer_unlock(eti->peer); +	goner->node = NULL; +	XFREE(MTYPE_RFAPI_ETI, goner); + +	route_unlock_node(etn);  } -struct vnc_export_info * -vnc_eti_checktimer ( -    struct bgp		*bgp, -    vnc_export_type_t	etype, -    struct prefix	*p, -    struct peer		*peer, -    uint8_t		type, -    uint8_t		subtype) +struct vnc_export_info *vnc_eti_checktimer(struct bgp *bgp, +					   vnc_export_type_t etype, +					   struct prefix *p, struct peer *peer, +					   uint8_t type, uint8_t subtype)  { -  struct route_node *etn; -  struct vnc_export_info *eti; +	struct route_node *etn; +	struct vnc_export_info *eti; -  etn = vnc_etn_lookup (bgp, etype, p); -  if (!etn) -    return NULL; +	etn = vnc_etn_lookup(bgp, etype, p); +	if (!etn) +		return NULL; -  for (eti = etn->info; eti; eti = eti->next) -    { -      if (peer == eti->peer && type == eti->type && subtype == eti->subtype) -        { +	for (eti = etn->info; eti; eti = eti->next) { +		if (peer == eti->peer && type == eti->type +		    && subtype == eti->subtype) { -          break; -        } -    } +			break; +		} +	} -  route_unlock_node (etn); +	route_unlock_node(etn); -  if (eti && eti->timer) -    return eti; +	if (eti && eti->timer) +		return eti; -  return NULL; +	return NULL;  }  | 
