]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
Extract the route MTU for Linux.
authorRoy Marples <roy@marples.name>
Tue, 28 Jul 2015 21:32:13 +0000 (21:32 +0000)
committerRoy Marples <roy@marples.name>
Tue, 28 Jul 2015 21:32:13 +0000 (21:32 +0000)
if-linux.c

index 727c2c94fdc4d6eb331fdf7a7736b1b938ffd87b..e5340b97862734f113b6e593ac9ca8a88f7e0e4d 100644 (file)
@@ -437,7 +437,25 @@ if_copyrt(struct dhcpcd_ctx *ctx, struct rt *rt, struct nlmsghdr *nlm)
                case RTA_PRIORITY:
                        rt->metric = *(unsigned int *)RTA_DATA(rta);
                        break;
+               case RTA_METRICS:
+               {
+                       struct rtattr *r2;
+                       size_t l2;
+
+                       l2 = rta->rta_len;
+                       r2 = (struct rtattr *)RTA_DATA(rta);
+                       while (RTA_OK(r2, l2)) {
+                               switch (r2->rta_type) {
+                               case RTAX_MTU:
+                                       rt->mtu = *(unsigned int *)RTA_DATA(r2);
+                                       break;
+                               }
+                               r2 = RTA_NEXT(r2, l2);
+                       }
+                       break;
+               }
                }
+
                rta = RTA_NEXT(rta, len);
        }
 
@@ -498,6 +516,23 @@ if_copyrt6(struct dhcpcd_ctx *ctx, struct rt6 *rt, struct nlmsghdr *nlm)
                case RTA_PRIORITY:
                        rt->metric = *(unsigned int *)RTA_DATA(rta);
                        break;
+               case RTA_METRICS:
+               {
+                       struct rtattr *r2;
+                       size_t l2;
+
+                       l2 = rta->rta_len;
+                       r2 = (struct rtattr *)RTA_DATA(rta);
+                       while (RTA_OK(r2, l2)) {
+                               switch (r2->rta_type) {
+                               case RTAX_MTU:
+                                       rt->mtu = *(unsigned int *)RTA_DATA(r2);
+                                       break;
+                               }
+                               r2 = RTA_NEXT(r2, l2);
+                       }
+                       break;
+               }
                }
                rta = RTA_NEXT(rta, len);
        }