]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
Merge branch 'master' into rbtree
authorRoy Marples <roy@marples.name>
Tue, 16 Apr 2019 19:02:36 +0000 (20:02 +0100)
committerRoy Marples <roy@marples.name>
Tue, 16 Apr 2019 19:02:36 +0000 (20:02 +0100)
14 files changed:
1  2 
configure
src/dhcp.c
src/dhcp6.c
src/dhcpcd.c
src/if-bsd.c
src/if-linux.c
src/if-options.c
src/if.c
src/if.h
src/ipv4.c
src/ipv4ll.c
src/ipv6.c
src/route.c
src/route.h

diff --cc configure
Simple merge
diff --cc src/dhcp.c
Simple merge
diff --cc src/dhcp6.c
Simple merge
diff --cc src/dhcpcd.c
Simple merge
diff --cc src/if-bsd.c
Simple merge
diff --cc src/if-linux.c
Simple merge
index 8f6c03721f8bc515ec045e9eb3b495b5b5e76ec8,75718aaebd1a260cdf65d1b24918de7b9784ab3c..9ca0652572b36dc23f6906bc3314e18b2fa86aa9
@@@ -1104,16 -1122,16 +1123,16 @@@ parse_option(struct dhcpcd_ctx *ctx, co
                                *fp = ' ';
                                return -1;
                        }
--                      if ((rt = rt_new0(ctx)) == NULL) {
--                              *fp = ' ';
++                      *fp = ' ';
++                      if ((rt = rt_new0(ctx)) == NULL)
                                return -1;
--                      }
                        sa_in_init(&rt->rt_dest, &addr);
                        sa_in_init(&rt->rt_netmask, &addr2);
                        sa_in_init(&rt->rt_gateway, &addr3);
 -                      TAILQ_INSERT_TAIL(&ifo->routes, rt, rt_next);
 -                      *fp = ' ';
 -                      add_environ(&ifo->config, arg, 0);
 +                      if (rb_tree_insert_node(&ifo->routes, rt) != rt)
 +                              rt_free(rt);
-                       *fp = ' ';
++                      else
++                              add_environ(&ifo->config, arg, 0);
                } else if (strncmp(arg, "routers=", strlen("routers=")) == 0) {
                        if (parse_addr(&addr, NULL, p) == -1)
                                return -1;
                        sa_in_init(&rt->rt_dest, &addr2);
                        sa_in_init(&rt->rt_netmask, &addr2);
                        sa_in_init(&rt->rt_gateway, &addr);
 -                      TAILQ_INSERT_TAIL(&ifo->routes, rt, rt_next);
 -                      add_environ(&ifo->config, arg, 0);
 +                      if (rb_tree_insert_node(&ifo->routes, rt) != rt)
 +                              rt_free(rt);
++                      else
++                              add_environ(&ifo->config, arg, 0);
                } else if (strncmp(arg, "interface_mtu=",
                    strlen("interface_mtu=")) == 0 ||
                    strncmp(arg, "mtu=", strlen("mtu=")) == 0)
@@@ -2290,9 -2266,10 +2279,10 @@@ default_config(struct dhcpcd_ctx *ctx
        ifo->options |= DHCPCD_IF_UP | DHCPCD_LINK | DHCPCD_INITIAL_DELAY;
        ifo->timeout = DEFAULT_TIMEOUT;
        ifo->reboot = DEFAULT_REBOOT;
+       ifo->script = UNCONST(default_script);
        ifo->metric = -1;
        ifo->auth.options |= DHCPCD_AUTH_REQUIRE;
 -      TAILQ_INIT(&ifo->routes);
 +      rb_tree_init(&ifo->routes, &rt_compare_list_ops);
  #ifdef AUTH
        TAILQ_INIT(&ifo->auth.tokens);
  #endif
diff --cc src/if.c
index d58ecb8affb6179c49e76c3aabaa84ba498a3527,efc4314c94dbb897d257416a24bcea2e1d3cf874..6a7b38be97121e59ceaba8ff651084022708e576
+++ b/src/if.c
@@@ -720,6 -732,98 +732,17 @@@ if_domtu(const struct interface *ifp, s
        return ifr.ifr_mtu;
  }
  
 -/* Interface comparer for working out ordering. */
 -static int
 -if_cmp(const struct interface *si, const struct interface *ti)
 -{
 -#ifdef INET
 -      int r;
 -#endif
 -
 -      /* Check active first */
 -      if (si->active > ti->active)
 -              return -1;
 -      if (si->active < ti->active)
 -              return 1;
 -
 -      /* Check carrier status next */
 -      if (si->carrier > ti->carrier)
 -              return -1;
 -      if (si->carrier < ti->carrier)
 -              return 1;
 -#ifdef INET
 -      if (D_STATE_RUNNING(si) && !D_STATE_RUNNING(ti))
 -              return -1;
 -      if (!D_STATE_RUNNING(si) && D_STATE_RUNNING(ti))
 -              return 1;
 -#endif
 -#ifdef INET6
 -      if (RS_STATE_RUNNING(si) && !RS_STATE_RUNNING(ti))
 -              return -1;
 -      if (!RS_STATE_RUNNING(si) && RS_STATE_RUNNING(ti))
 -              return 1;
 -#endif
 -#ifdef DHCP6
 -      if (D6_STATE_RUNNING(si) && !D6_STATE_RUNNING(ti))
 -              return -1;
 -      if (!D6_STATE_RUNNING(si) && D6_STATE_RUNNING(ti))
 -              return 1;
 -#endif
 -
 -#ifdef INET
 -      /* Special attention needed here due to states and IPv4LL. */
 -      if ((r = ipv4_ifcmp(si, ti)) != 0)
 -              return r;
 -#endif
 -
 -      /* Finally, metric */
 -      if (si->metric < ti->metric)
 -              return -1;
 -      if (si->metric > ti->metric)
 -              return 1;
 -      return 0;
 -}
 -
+ #ifdef ALIAS_ADDR
+ int
+ if_makealias(char *alias, size_t alias_len, const char *ifname, int lun)
+ {
+       if (lun == 0)
+               return strlcpy(alias, ifname, alias_len);
+       return snprintf(alias, alias_len, "%s:%u", ifname, lun);
+ }
+ #endif
 -/* Sort the interfaces into a preferred order - best first, worst last. */
 -void
 -if_sortinterfaces(struct dhcpcd_ctx *ctx)
 -{
 -      struct if_head sorted;
 -      struct interface *ifp, *ift;
 -
 -      if (ctx->ifaces == NULL ||
 -          (ifp = TAILQ_FIRST(ctx->ifaces)) == NULL ||
 -          TAILQ_NEXT(ifp, next) == NULL)
 -              return;
 -
 -      TAILQ_INIT(&sorted);
 -      TAILQ_REMOVE(ctx->ifaces, ifp, next);
 -      TAILQ_INSERT_HEAD(&sorted, ifp, next);
 -      while ((ifp = TAILQ_FIRST(ctx->ifaces))) {
 -              TAILQ_REMOVE(ctx->ifaces, ifp, next);
 -              TAILQ_FOREACH(ift, &sorted, next) {
 -                      if (if_cmp(ifp, ift) == -1) {
 -                              TAILQ_INSERT_BEFORE(ift, ifp, next);
 -                              break;
 -                      }
 -              }
 -              if (ift == NULL)
 -                      TAILQ_INSERT_TAIL(&sorted, ifp, next);
 -      }
 -      TAILQ_CONCAT(ctx->ifaces, &sorted, next);
 -}
 -
  struct interface *
  if_findifpfromcmsg(struct dhcpcd_ctx *ctx, struct msghdr *msg, int *hoplimit)
  {
diff --cc src/if.h
Simple merge
diff --cc src/ipv4.c
Simple merge
diff --cc src/ipv4ll.c
index e4662ca7f929ac58148202ccbeb47211527565b5,51cd4f5b2d169c2f061f71166b4466876b7ea900..c2a99856e61eff8f3b0eb27ab0552e3d59dd1a59
@@@ -310,6 -305,8 +310,7 @@@ ipv4ll_conflicted(struct arp_state *ast
                ipv4_deladdr(state->addr, 1);
                state->down = 1;
                state->addr = NULL;
 -              if_initrt(ifp->ctx, AF_INET);
+               rt_build(ifp->ctx, AF_INET);
                script_runreason(ifp, "IPV4LL");
        }
  
diff --cc src/ipv6.c
Simple merge
diff --cc src/route.c
index 9edac1ef643126200e684e2cecdd6bcfce026cee,e5546d0ab578907d6de257b40a82cd47a3c08f1a..20e6f679f68659de2858accf9008ed55a7c344e6
@@@ -379,10 -282,17 +379,13 @@@ rt_recvrt(int cmd, const struct rt *rt
  
        switch(cmd) {
        case RTM_DELETE:
 +              f = rb_tree_find_node(&ctx->routes, rt);
                if (f != NULL) {
 -                      TAILQ_REMOVE(&ctx->kroutes, f, rt_next);
 -                      rt_free(f);
 -              }
 -              if ((f = rt_find(&ctx->routes, rt)) != NULL) {
+                       char buf[32];
 -                      TAILQ_REMOVE(&ctx->routes, f, rt_next);
 +                      rb_tree_remove_node(&ctx->routes, f);
-                       rt_desc("deleted", f);
+                       snprintf(buf, sizeof(buf), "pid %d deleted", pid);
+                       rt_desc(buf, f);
                        rt_free(f);
                }
                break;
diff --cc src/route.h
Simple merge