]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
linux: ignore source-based routes (#372)
authorScott Shambarger <devel@shambarger.net>
Tue, 29 Oct 2024 07:52:45 +0000 (00:52 -0700)
committerGitHub <noreply@github.com>
Tue, 29 Oct 2024 07:52:45 +0000 (07:52 +0000)
Since source-based routes aren't used by dhcpcd, it's best if they
are ignored so that they aren't confused with default routes.

src/if-linux.c

index 53fa48f596fd61eddccfef9546376444d87d0555..5980574b13004e0e561246cab0677c601c748ba4 100644 (file)
@@ -702,6 +702,27 @@ if_copyrt(struct dhcpcd_ctx *ctx, struct rt *rt, struct nlmsghdr *nlm)
                case RTA_DST:
                        sa = &rt->rt_dest;
                        break;
+               case RTA_SRC:
+               {
+                       union sa_ss ssa;
+                       struct sockaddr *psa = (struct sockaddr *)&ssa;
+                       socklen_t salen;
+
+                       psa->sa_family = rtm->rtm_family;
+                       salen = sa_addrlen(psa);
+                       memcpy((char *)psa + sa_addroffset(psa),
+                              RTA_DATA(rta), MIN(salen, RTA_PAYLOAD(rta)));
+                       /* if ip-route "from" address is not unspecified,
+                           route is source-based, eg:
+                             <dest-net> from <source-net> via ... dev ...
+                           ignore the route as may otherwise appear to overlap
+                           with routes set/removed by dhcpcd */
+                       if (!sa_is_unspecified(psa)) {
+                               errno = ENOTSUP;
+                               return -1;
+                       }
+                       break;
+               }
                case RTA_GATEWAY:
                        sa = &rt->rt_gateway;
                        break;