|
| 1 | +diff --git a/src/libnl3/patch/0003-Adding-support-for-RTA_NH_ID-attribute.patch b/src/libnl3/patch/0003-Adding-support-for-RTA_NH_ID-attribute.patch |
| 2 | +new file mode 100644 |
| 3 | +index 000000000..09ceed803 |
| 4 | +--- /dev/null |
| 5 | ++++ b/src/libnl3/patch/0003-Adding-support-for-RTA_NH_ID-attribute.patch |
| 6 | +@@ -0,0 +1,154 @@ |
| 7 | ++From 70e995bd076b5027414e1332a453f366f20c7002 Mon Sep 17 00:00:00 2001 |
| 8 | ++From: Fernando <[email protected]> |
| 9 | ++Date: Mon, 19 Sep 2022 12:56:46 -0300 |
| 10 | ++Subject: Adding support for RTA_NH_ID attribute |
| 11 | ++ |
| 12 | ++--- |
| 13 | ++ include/netlink-private/types.h | 1 + |
| 14 | ++ include/netlink/route/route.h | 2 ++ |
| 15 | ++ lib/route/route_obj.c | 23 +++++++++++++++++++++++ |
| 16 | ++ 3 files changed, 26 insertions(+) |
| 17 | ++ |
| 18 | ++diff --git a/include/netlink-private/types.h b/include/netlink-private/types.h |
| 19 | ++index 97af3e5..51e58b1 100644 |
| 20 | ++--- a/include/netlink-private/types.h |
| 21 | +++++ b/include/netlink-private/types.h |
| 22 | ++@@ -348,6 +348,7 @@ struct rtnl_route |
| 23 | ++ uint32_t rt_metrics[RTAX_MAX]; |
| 24 | ++ uint32_t rt_metrics_mask; |
| 25 | ++ uint32_t rt_nr_nh; |
| 26 | +++ uint32_t rt_nh_id; |
| 27 | ++ struct nl_addr * rt_pref_src; |
| 28 | ++ struct nl_list_head rt_nexthops; |
| 29 | ++ struct rtnl_rtcacheinfo rt_cacheinfo; |
| 30 | ++diff --git a/include/netlink/route/route.h b/include/netlink/route/route.h |
| 31 | ++index 824dae3..9cfa393 100644 |
| 32 | ++--- a/include/netlink/route/route.h |
| 33 | +++++ b/include/netlink/route/route.h |
| 34 | ++@@ -93,6 +93,8 @@ extern int rtnl_route_set_pref_src(struct rtnl_route *, struct nl_addr *); |
| 35 | ++ extern struct nl_addr *rtnl_route_get_pref_src(struct rtnl_route *); |
| 36 | ++ extern void rtnl_route_set_iif(struct rtnl_route *, int); |
| 37 | ++ extern int rtnl_route_get_iif(struct rtnl_route *); |
| 38 | +++extern void rtnl_route_set_nh_id(struct rtnl_route *, uint32_t); |
| 39 | +++extern uint32_t rtnl_route_get_nh_id(struct rtnl_route *); |
| 40 | ++ extern int rtnl_route_get_src_len(struct rtnl_route *); |
| 41 | ++ extern void rtnl_route_set_ttl_propagate(struct rtnl_route *route, |
| 42 | ++ uint8_t ttl_prop); |
| 43 | ++diff --git a/lib/route/route_obj.c b/lib/route/route_obj.c |
| 44 | ++index bacabe8..5d9d4ce 100644 |
| 45 | ++--- a/lib/route/route_obj.c |
| 46 | +++++ b/lib/route/route_obj.c |
| 47 | ++@@ -65,6 +65,7 @@ |
| 48 | ++ #define ROUTE_ATTR_REALMS 0x010000 |
| 49 | ++ #define ROUTE_ATTR_CACHEINFO 0x020000 |
| 50 | ++ #define ROUTE_ATTR_TTL_PROPAGATE 0x040000 |
| 51 | +++#define ROUTE_ATTR_NH_ID 0x080000 |
| 52 | ++ /** @endcond */ |
| 53 | ++ |
| 54 | ++ static void route_constructor(struct nl_object *c) |
| 55 | ++@@ -252,6 +253,8 @@ static void route_dump_details(struct nl_object *a, struct nl_dump_params *p) |
| 56 | ++ nl_dump(p, " ttl-propagate %s", |
| 57 | ++ r->rt_ttl_propagate ? "enabled" : "disabled"); |
| 58 | ++ } |
| 59 | +++ if (r->ce_mask & ROUTE_ATTR_NH_ID) |
| 60 | +++ nl_dump(p, "nh id %d ", r->rt_nh_id); |
| 61 | ++ |
| 62 | ++ nl_dump(p, "\n"); |
| 63 | ++ |
| 64 | ++@@ -391,6 +394,7 @@ static uint64_t route_compare(struct nl_object *_a, struct nl_object *_b, |
| 65 | ++ b->rt_pref_src)); |
| 66 | ++ diff |= ROUTE_DIFF(TTL_PROPAGATE, |
| 67 | ++ a->rt_ttl_propagate != b->rt_ttl_propagate); |
| 68 | +++ diff |= ROUTE_DIFF(NH_ID, a->rt_nh_id != b->rt_nh_id); |
| 69 | ++ |
| 70 | ++ if (flags & LOOSE_COMPARISON) { |
| 71 | ++ nl_list_for_each_entry(nh_b, &b->rt_nexthops, rtnh_list) { |
| 72 | ++@@ -589,6 +593,7 @@ static const struct trans_tbl route_attrs[] = { |
| 73 | ++ __ADD(ROUTE_ATTR_REALMS, realms), |
| 74 | ++ __ADD(ROUTE_ATTR_CACHEINFO, cacheinfo), |
| 75 | ++ __ADD(ROUTE_ATTR_TTL_PROPAGATE, ttl_propagate), |
| 76 | +++ __ADD(ROUTE_ATTR_NH_ID, nh_id), |
| 77 | ++ }; |
| 78 | ++ |
| 79 | ++ static char *route_attrs2str(int attrs, char *buf, size_t len) |
| 80 | ++@@ -862,6 +867,17 @@ int rtnl_route_get_iif(struct rtnl_route *route) |
| 81 | ++ return route->rt_iif; |
| 82 | ++ } |
| 83 | ++ |
| 84 | +++void rtnl_route_set_nh_id(struct rtnl_route *route, uint32_t nhid) |
| 85 | +++{ |
| 86 | +++ route->rt_nh_id = nhid; |
| 87 | +++ route->ce_mask |= ROUTE_ATTR_NH_ID; |
| 88 | +++} |
| 89 | +++ |
| 90 | +++uint32_t rtnl_route_get_nh_id(struct rtnl_route *route) |
| 91 | +++{ |
| 92 | +++ return route->rt_nh_id; |
| 93 | +++} |
| 94 | +++ |
| 95 | ++ void rtnl_route_add_nexthop(struct rtnl_route *route, struct rtnl_nexthop *nh) |
| 96 | ++ { |
| 97 | ++ nl_list_add_tail(&nh->rtnh_list, &route->rt_nexthops); |
| 98 | ++@@ -1018,6 +1034,7 @@ static struct nla_policy route_policy[RTA_MAX+1] = { |
| 99 | ++ [RTA_TTL_PROPAGATE] = { .type = NLA_U8 }, |
| 100 | ++ [RTA_ENCAP] = { .type = NLA_NESTED }, |
| 101 | ++ [RTA_ENCAP_TYPE] = { .type = NLA_U16 }, |
| 102 | +++ [RTA_NH_ID] = { .type = NLA_U32 }, |
| 103 | ++ }; |
| 104 | ++ |
| 105 | ++ static int parse_multipath(struct rtnl_route *route, struct nlattr *attr) |
| 106 | ++@@ -1201,6 +1218,9 @@ int rtnl_route_parse(struct nlmsghdr *nlh, struct rtnl_route **result) |
| 107 | ++ nl_addr_put(addr); |
| 108 | ++ } |
| 109 | ++ |
| 110 | +++ if (tb[RTA_NH_ID]) |
| 111 | +++ rtnl_route_set_nh_id(route, nla_get_u32(tb[RTA_NH_ID])); |
| 112 | +++ |
| 113 | ++ if (tb[RTA_METRICS]) { |
| 114 | ++ struct nlattr *mtb[RTAX_MAX + 1]; |
| 115 | ++ int i; |
| 116 | ++@@ -1404,6 +1424,9 @@ int rtnl_route_build_msg(struct nl_msg *msg, struct rtnl_route *route) |
| 117 | ++ if (route->ce_mask & ROUTE_ATTR_TTL_PROPAGATE) |
| 118 | ++ NLA_PUT_U8(msg, RTA_TTL_PROPAGATE, route->rt_ttl_propagate); |
| 119 | ++ |
| 120 | +++ if (route->ce_mask & ROUTE_ATTR_NH_ID) |
| 121 | +++ NLA_PUT_U32(msg, RTA_NH_ID, route->rt_nh_id); |
| 122 | +++ |
| 123 | ++ if (route->rt_nmetrics > 0) { |
| 124 | ++ uint32_t val; |
| 125 | ++ |
| 126 | ++-- |
| 127 | ++2.25.1 |
| 128 | ++ |
| 129 | ++diff --git a/include/linux-private/linux/rtnetlink.h b/include/linux-private/linux/rtnetlink.h |
| 130 | ++index 8c1d600..82fb56b 100644 |
| 131 | ++--- a/include/linux-private/linux/rtnetlink.h |
| 132 | +++++ b/include/linux-private/linux/rtnetlink.h |
| 133 | ++@@ -342,6 +342,7 @@ enum rtattr_type_t { |
| 134 | ++ RTA_IP_PROTO, |
| 135 | ++ RTA_SPORT, |
| 136 | ++ RTA_DPORT, |
| 137 | +++ RTA_NH_ID, |
| 138 | ++ __RTA_MAX |
| 139 | ++ }; |
| 140 | ++ |
| 141 | ++diff --git a/libnl-route-3.sym b/libnl-route-3.sym |
| 142 | ++index ce6d714..fb81b7f 100644 |
| 143 | ++--- a/libnl-route-3.sym |
| 144 | +++++ b/libnl-route-3.sym |
| 145 | ++@@ -690,6 +690,7 @@ global: |
| 146 | ++ rtnl_route_get_family; |
| 147 | ++ rtnl_route_get_flags; |
| 148 | ++ rtnl_route_get_iif; |
| 149 | +++ rtnl_route_get_nh_id; |
| 150 | ++ rtnl_route_get_metric; |
| 151 | ++ rtnl_route_get_nexthops; |
| 152 | ++ rtnl_route_get_nnexthops; |
| 153 | ++@@ -732,6 +733,7 @@ global: |
| 154 | ++ rtnl_route_set_family; |
| 155 | ++ rtnl_route_set_flags; |
| 156 | ++ rtnl_route_set_iif; |
| 157 | +++ rtnl_route_set_nh_id; |
| 158 | ++ rtnl_route_set_metric; |
| 159 | ++ rtnl_route_set_pref_src; |
| 160 | ++ rtnl_route_set_priority; |
| 161 | +diff --git a/src/libnl3/patch/series b/src/libnl3/patch/series |
| 162 | +index 4508b1dd6..4c7c2d8e2 100644 |
| 163 | +--- a/src/libnl3/patch/series |
| 164 | ++++ b/src/libnl3/patch/series |
| 165 | +@@ -1,2 +1,3 @@ |
| 166 | + 0001-mpls-encap-accessors.patch |
| 167 | + 0002-mpls-remove-nl_addr_valid.patch |
| 168 | ++0003-Adding-support-for-RTA_NH_ID-attribute.patch |
0 commit comments