ospfd: do not change router-id on reload if unspecified

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

ospfd: do not change router-id on reload if unspecified

Denis Fondras
When router-id is unspecified, ospfd will choose the lowest IP address of the
host. I added an area and an IP lower than the existing ones and on reload
ospfd asked me to restart and did not activate the new area.

Why would it update the router-id in such a case ?

This diff changes this behaviour. When router-id is not explicitely changed,
keep the existing setting.

Index: ospfd.c
===================================================================
RCS file: /cvs/src/usr.sbin/ospfd/ospfd.c,v
retrieving revision 1.107
diff -u -p -r1.107 ospfd.c
--- ospfd.c 26 Mar 2019 20:39:33 -0000 1.107
+++ ospfd.c 15 May 2019 13:19:52 -0000
@@ -185,6 +185,8 @@ main(int argc, char *argv[])
  kif_clear();
  exit(1);
  }
+        if (ospfd_conf->rtr_id.s_addr == 0)
+                ospfd_conf->rtr_id.s_addr = get_rtr_id();
 
  if (sockname == NULL) {
  if (asprintf(&sockname, "%s.%d", OSPFD_SOCKET,
@@ -641,6 +643,10 @@ ospf_reload(void)
 
  if ((xconf = parse_config(conffile, ospfd_conf->opts)) == NULL)
  return (-1);
+
+ /* No router-id was specified, keep existing value */
+        if (xconf->rtr_id.s_addr == 0)
+                xconf->rtr_id.s_addr = ospfd_conf->rtr_id.s_addr;
 
  /* Abort the reload if rtr_id changed */
  if (ospfd_conf->rtr_id.s_addr != xconf->rtr_id.s_addr) {
Index: ospfd.h
===================================================================
RCS file: /cvs/src/usr.sbin/ospfd/ospfd.h,v
retrieving revision 1.103
diff -u -p -r1.103 ospfd.h
--- ospfd.h 28 Dec 2018 19:25:10 -0000 1.103
+++ ospfd.h 15 May 2019 13:19:52 -0000
@@ -561,6 +561,7 @@ int carp_demote_set(char *, int);
 
 /* parse.y */
 struct ospfd_conf *parse_config(char *, int);
+u_int32_t get_rtr_id(void);
 int cmdline_symset(char *);
 void conf_clear_redist_list(struct redist_list *);
 
Index: parse.y
===================================================================
RCS file: /cvs/src/usr.sbin/ospfd/parse.y,v
retrieving revision 1.96
diff -u -p -r1.96 parse.y
--- parse.y 29 Apr 2019 05:14:38 -0000 1.96
+++ parse.y 15 May 2019 13:19:52 -0000
@@ -83,7 +83,6 @@ int symset(const char *, const char *,
 char *symget(const char *);
 
 void clear_config(struct ospfd_conf *xconf);
-u_int32_t get_rtr_id(void);
 int host(const char *, struct in_addr *, struct in_addr *);
 
 static struct ospfd_conf *conf;
@@ -1253,9 +1252,6 @@ parse_config(char *filename, int opts)
  clear_config(conf);
  return (NULL);
  }
-
- if (conf->rtr_id.s_addr == 0)
- conf->rtr_id.s_addr = get_rtr_id();
 
  return (conf);
 }

Reply | Threaded
Open this post in threaded view
|

Re: ospfd: do not change router-id on reload if unspecified

Remi Locherer
On Wed, May 15, 2019 at 03:52:57PM +0200, Denis Fondras wrote:
> When router-id is unspecified, ospfd will choose the lowest IP address of the
> host. I added an area and an IP lower than the existing ones and on reload
> ospfd asked me to restart and did not activate the new area.
>
> Why would it update the router-id in such a case ?
>
> This diff changes this behaviour. When router-id is not explicitely changed,
> keep the existing setting.

makes sense to me.
OK remi@

>
> Index: ospfd.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/ospfd/ospfd.c,v
> retrieving revision 1.107
> diff -u -p -r1.107 ospfd.c
> --- ospfd.c 26 Mar 2019 20:39:33 -0000 1.107
> +++ ospfd.c 15 May 2019 13:19:52 -0000
> @@ -185,6 +185,8 @@ main(int argc, char *argv[])
>   kif_clear();
>   exit(1);
>   }
> +        if (ospfd_conf->rtr_id.s_addr == 0)
> +                ospfd_conf->rtr_id.s_addr = get_rtr_id();
>  
>   if (sockname == NULL) {
>   if (asprintf(&sockname, "%s.%d", OSPFD_SOCKET,
> @@ -641,6 +643,10 @@ ospf_reload(void)
>  
>   if ((xconf = parse_config(conffile, ospfd_conf->opts)) == NULL)
>   return (-1);
> +
> + /* No router-id was specified, keep existing value */
> +        if (xconf->rtr_id.s_addr == 0)
> +                xconf->rtr_id.s_addr = ospfd_conf->rtr_id.s_addr;
>  
>   /* Abort the reload if rtr_id changed */
>   if (ospfd_conf->rtr_id.s_addr != xconf->rtr_id.s_addr) {
> Index: ospfd.h
> ===================================================================
> RCS file: /cvs/src/usr.sbin/ospfd/ospfd.h,v
> retrieving revision 1.103
> diff -u -p -r1.103 ospfd.h
> --- ospfd.h 28 Dec 2018 19:25:10 -0000 1.103
> +++ ospfd.h 15 May 2019 13:19:52 -0000
> @@ -561,6 +561,7 @@ int carp_demote_set(char *, int);
>  
>  /* parse.y */
>  struct ospfd_conf *parse_config(char *, int);
> +u_int32_t get_rtr_id(void);
>  int cmdline_symset(char *);
>  void conf_clear_redist_list(struct redist_list *);
>  
> Index: parse.y
> ===================================================================
> RCS file: /cvs/src/usr.sbin/ospfd/parse.y,v
> retrieving revision 1.96
> diff -u -p -r1.96 parse.y
> --- parse.y 29 Apr 2019 05:14:38 -0000 1.96
> +++ parse.y 15 May 2019 13:19:52 -0000
> @@ -83,7 +83,6 @@ int symset(const char *, const char *,
>  char *symget(const char *);
>  
>  void clear_config(struct ospfd_conf *xconf);
> -u_int32_t get_rtr_id(void);
>  int host(const char *, struct in_addr *, struct in_addr *);
>  
>  static struct ospfd_conf *conf;
> @@ -1253,9 +1252,6 @@ parse_config(char *filename, int opts)
>   clear_config(conf);
>   return (NULL);
>   }
> -
> - if (conf->rtr_id.s_addr == 0)
> - conf->rtr_id.s_addr = get_rtr_id();
>  
>   return (conf);
>  }
>