David -

I agree having the router-id set all over the place is not great, but
hasn't bgpd.c become enough of a dumping ground for code?  Might this be a
good chance to break this up a bit more intelligently?

donald

On Tue, May 24, 2016 at 12:58 PM, David Lamparter <
equi...@opensourcerouting.org> wrote:

> Logic for determining the router-id was spread out over bgp_zebra.c and
> bgp_vty.c.  Move to bgpd/bgpd.c and have these two call more properly
> encapsulated functions.
>
> Signed-off-by: David Lamparter <equi...@opensourcerouting.org>
> ---
>  bgpd/bgp_vty.c   |  9 +++------
>  bgpd/bgp_zebra.c |  9 +--------
>  bgpd/bgp_zebra.h |  1 +
>  bgpd/bgpd.c      | 23 ++++++++++++++++++++++-
>  bgpd/bgpd.h      |  3 ++-
>  5 files changed, 29 insertions(+), 16 deletions(-)
>
> diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c
> index 6db3dcb..6b3deb3 100644
> --- a/bgpd/bgp_vty.c
> +++ b/bgpd/bgp_vty.c
> @@ -51,8 +51,6 @@ Software Foundation, Inc., 59 Temple Place - Suite 330,
> Boston, MA
>  #include "bgpd/bgp_vty.h"
>  #include "bgpd/bgp_mpath.h"
>
> -extern struct in_addr router_id_zebra;
> -
>  /* Utility function to get address family from current node.  */
>  afi_t
>  bgp_node_afi (struct vty *vty)
> @@ -489,8 +487,7 @@ DEFUN (bgp_router_id,
>        return CMD_WARNING;
>      }
>
> -  bgp->router_id_static = id;
> -  bgp_router_id_set (bgp, &id);
> +  bgp_router_id_static_set (bgp, id);
>
>    return CMD_SUCCESS;
>  }
> @@ -524,8 +521,8 @@ DEFUN (no_bgp_router_id,
>         }
>      }
>
> -  bgp->router_id_static.s_addr = 0;
> -  bgp_router_id_set (bgp, &router_id_zebra);
> +  id.s_addr = 0;
> +  bgp_router_id_static_set (bgp, id);
>
>    return CMD_SUCCESS;
>  }
> diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c
> index d0b9216..55a534e 100644
> --- a/bgpd/bgp_zebra.c
> +++ b/bgpd/bgp_zebra.c
> @@ -53,8 +53,6 @@ bgp_router_id_update (int command, struct zclient
> *zclient, zebra_size_t length,
>      vrf_id_t vrf_id)
>  {
>    struct prefix router_id;
> -  struct listnode *node, *nnode;
> -  struct bgp *bgp;
>
>    zebra_router_id_update_read(zclient->ibuf,&router_id);
>
> @@ -67,12 +65,7 @@ bgp_router_id_update (int command, struct zclient
> *zclient, zebra_size_t length,
>
>    router_id_zebra = router_id.u.prefix4;
>
> -  for (ALL_LIST_ELEMENTS (bm->bgp, node, nnode, bgp))
> -    {
> -      if (!bgp->router_id_static.s_addr)
> -        bgp_router_id_set (bgp, &router_id.u.prefix4);
> -    }
> -
> +  bgp_router_id_zebra_bump ();
>    return 0;
>  }
>
> diff --git a/bgpd/bgp_zebra.h b/bgpd/bgp_zebra.h
> index e69a0bc..2565158 100644
> --- a/bgpd/bgp_zebra.h
> +++ b/bgpd/bgp_zebra.h
> @@ -24,6 +24,7 @@ Boston, MA 02111-1307, USA.  */
>  #define BGP_NEXTHOP_BUF_SIZE (8 * sizeof (struct in_addr *))
>
>  extern struct stream *bgp_nexthop_buf;
> +extern struct in_addr router_id_zebra;
>
>  extern void bgp_zebra_init (struct thread_master *master);
>  extern void bgp_zebra_destroy (void);
> diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c
> index cadca11..5886cc6 100644
> --- a/bgpd/bgpd.c
> +++ b/bgpd/bgpd.c
> @@ -160,7 +160,7 @@ bgp_config_check (struct bgp *bgp, int config)
>  }
>
>  /* Set BGP router identifier. */
> -int
> +static int
>  bgp_router_id_set (struct bgp *bgp, struct in_addr *id)
>  {
>    struct peer *peer;
> @@ -188,6 +188,27 @@ bgp_router_id_set (struct bgp *bgp, struct in_addr
> *id)
>    return 0;
>  }
>
> +void
> +bgp_router_id_zebra_bump (void)
> +{
> +  struct listnode *node, *nnode;
> +  struct bgp *bgp;
> +
> +  for (ALL_LIST_ELEMENTS (bm->bgp, node, nnode, bgp))
> +    {
> +      if (!bgp->router_id_static.s_addr)
> +        bgp_router_id_set (bgp, &router_id_zebra);
> +    }
> +}
> +
> +int
> +bgp_router_id_static_set (struct bgp *bgp, struct in_addr id)
> +{
> +  bgp->router_id_static = id;
> +  bgp_router_id_set (bgp, id.s_addr ? &id : &router_id_zebra);
> +  return 0;
> +}
> +
>  /* BGP's cluster-id control. */
>  int
>  bgp_cluster_id_set (struct bgp *bgp, struct in_addr *cluster_id)
> diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h
> index 25bb1e8..96da8b5 100644
> --- a/bgpd/bgpd.h
> +++ b/bgpd/bgpd.h
> @@ -884,7 +884,8 @@ extern int bgp_flag_check (struct bgp *, int);
>  extern void bgp_lock (struct bgp *);
>  extern void bgp_unlock (struct bgp *);
>
> -extern int bgp_router_id_set (struct bgp *, struct in_addr *);
> +extern void bgp_router_id_zebra_bump (void);
> +extern int bgp_router_id_static_set (struct bgp *, struct in_addr);
>
>  extern int bgp_cluster_id_set (struct bgp *, struct in_addr *);
>  extern int bgp_cluster_id_unset (struct bgp *);
> --
> 2.3.6
>
>
> _______________________________________________
> Quagga-dev mailing list
> Quagga-dev@lists.quagga.net
> https://lists.quagga.net/mailman/listinfo/quagga-dev
>
_______________________________________________
Quagga-dev mailing list
Quagga-dev@lists.quagga.net
https://lists.quagga.net/mailman/listinfo/quagga-dev

Reply via email to