Gentoo Archives: gentoo-commits

From: "Alexandre Rostovtsev (tetromino)" <tetromino@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] gentoo-x86 commit in net-misc/networkmanager/files: networkmanager-0.9.4.0-ipv6-route.patch 01-org.freedesktop.NetworkManager.settings.modify.system.rules networkmanager-0.9.4.0-force-libnl1.1.patch
Date: Wed, 04 Jul 2012 07:56:36
Message-Id: 20120704075622.5460E2004C@flycatcher.gentoo.org
1 tetromino 12/07/04 07:56:22
2
3 Added: networkmanager-0.9.4.0-ipv6-route.patch
4 01-org.freedesktop.NetworkManager.settings.modify.system.rules
5 Removed: networkmanager-0.9.4.0-force-libnl1.1.patch
6 Log:
7 Fix default ipv6 route issue on some networks (bug #417529, thanks to Marien Zwart). Install polkit-1/rules.d file for polkit-0.106 support (bug #421577, thanks to Samuli Suominen). Add epatch_user to make it easier for users to locally patch networkmanager. Drop old.
8
9 (Portage version: 2.2.0_alpha115/cvs/Linux x86_64)
10
11 Revision Changes Path
12 1.1 net-misc/networkmanager/files/networkmanager-0.9.4.0-ipv6-route.patch
13
14 file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/net-misc/networkmanager/files/networkmanager-0.9.4.0-ipv6-route.patch?rev=1.1&view=markup
15 plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/net-misc/networkmanager/files/networkmanager-0.9.4.0-ipv6-route.patch?rev=1.1&content-type=text/plain
16
17 Index: networkmanager-0.9.4.0-ipv6-route.patch
18 ===================================================================
19 From 77de91e5a8b1c1993ae65c54b37e0411e78e6fe6 Mon Sep 17 00:00:00 2001
20 From: Dan Winship <danw@×××××.org>
21 Date: Thu, 19 Apr 2012 14:27:12 -0400
22 Subject: [PATCH] core: don't fight with the kernel over the default IPv6
23 route
24
25 The kernel wants there to be a default route over every RA-ed IPv6
26 interface, and it gets confused and annoyed if we remove that default
27 route and replace it with our own (causing it to effectively drop all
28 further RAs on the floor, which is particularly bad if some of the
29 information in the earlier RA had an expiration time).
30
31 So, rather than replacing the kernel's default route(s), just add an
32 additional one of our own, with a lower (ie, higher priority) metric.
33
34 https://bugzilla.redhat.com/show_bug.cgi?id=785772
35 ---
36 src/nm-system.c | 57 +++++++++++++++++++++++++++++++++++++++++++++---------
37 1 files changed, 47 insertions(+), 10 deletions(-)
38
39 diff --git a/src/nm-system.c b/src/nm-system.c
40 index 91153ec..4cebb13 100644
41 --- a/src/nm-system.c
42 +++ b/src/nm-system.c
43 @@ -1023,7 +1023,7 @@ add_ip6_route_to_gateway (int ifindex, const struct in6_addr *gw)
44 }
45
46 static int
47 -replace_default_ip6_route (int ifindex, const struct in6_addr *gw)
48 +add_default_ip6_route (int ifindex, const struct in6_addr *gw)
49 {
50 struct rtnl_route *route = NULL;
51 struct nl_sock *nlh;
52 @@ -1037,22 +1037,36 @@ replace_default_ip6_route (int ifindex, const struct in6_addr *gw)
53 route = nm_netlink_route_new (ifindex, AF_INET6, 0,
54 NMNL_PROP_SCOPE, RT_SCOPE_UNIVERSE,
55 NMNL_PROP_TABLE, RT_TABLE_MAIN,
56 + NMNL_PROP_PRIO, 1,
57 NULL);
58 g_return_val_if_fail (route != NULL, -ENOMEM);
59
60 /* Add the new default route */
61 - err = nm_netlink_route6_add (route, &in6addr_any, 0, gw, NLM_F_REPLACE);
62 - if (err == -NLE_EXIST) {
63 - /* FIXME: even though we use NLM_F_REPLACE the kernel won't replace
64 - * the route if it's the same. Suppress the pointless error.
65 - */
66 + err = nm_netlink_route6_add (route, &in6addr_any, 0, gw, NLM_F_CREATE);
67 + if (err == -NLE_EXIST)
68 err = 0;
69 - }
70
71 rtnl_route_put (route);
72 return err;
73 }
74
75 +static struct rtnl_route *
76 +find_static_default_routes (struct rtnl_route *route,
77 + struct nl_addr *dst,
78 + const char *iface,
79 + gpointer user_data)
80 +{
81 + GList **def_routes = user_data;
82 +
83 + if ( nl_addr_get_prefixlen (dst) == 0
84 + && rtnl_route_get_protocol (route) == RTPROT_STATIC) {
85 + rtnl_route_get (route);
86 + *def_routes = g_list_prepend (*def_routes, route);
87 + }
88 +
89 + return NULL;
90 +}
91 +
92 /*
93 * nm_system_replace_default_ip6_route
94 *
95 @@ -1062,12 +1076,35 @@ replace_default_ip6_route (int ifindex, const struct in6_addr *gw)
96 gboolean
97 nm_system_replace_default_ip6_route (int ifindex, const struct in6_addr *gw)
98 {
99 - struct rtnl_route *gw_route = NULL;
100 + GList *def_routes, *iter;
101 + struct rtnl_route *route, *gw_route = NULL;
102 gboolean success = FALSE;
103 char *iface;
104 int err;
105
106 - err = replace_default_ip6_route (ifindex, gw);
107 + /* We can't just use NLM_F_REPLACE here like in the IPv4 case, because
108 + * the kernel doesn't like it if we replace the default routes it
109 + * creates. (See rh#785772.) So we delete any non-kernel default routes,
110 + * and then add a new default route of our own with a lower metric than
111 + * the kernel ones.
112 + */
113 + def_routes = NULL;
114 + nm_netlink_foreach_route (ifindex, AF_INET6, RT_SCOPE_UNIVERSE, TRUE,
115 + find_static_default_routes, &def_routes);
116 + for (iter = def_routes; iter; iter = iter->next) {
117 + route = iter->data;
118 + if (!nm_netlink_route_delete (route)) {
119 + iface = nm_netlink_index_to_iface (ifindex);
120 + nm_log_err (LOGD_DEVICE | LOGD_IP6,
121 + "(%s): failed to delete existing IPv6 default route",
122 + iface);
123 + g_free (iface);
124 + }
125 + rtnl_route_put (route);
126 + }
127 + g_list_free (def_routes);
128 +
129 + err = add_default_ip6_route (ifindex, gw);
130 if (err == 0)
131 return TRUE;
132
133 @@ -1091,7 +1128,7 @@ nm_system_replace_default_ip6_route (int ifindex, const struct in6_addr *gw)
134 goto out;
135
136 /* Try adding the original route again */
137 - err = replace_default_ip6_route (ifindex, gw);
138 + err = add_default_ip6_route (ifindex, gw);
139 if (err != 0) {
140 nm_netlink_route_delete (gw_route);
141 nm_log_err (LOGD_DEVICE | LOGD_IP6,
142 --
143 1.7.8.6
144
145
146
147
148 1.1 net-misc/networkmanager/files/01-org.freedesktop.NetworkManager.settings.modify.system.rules
149
150 file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/net-misc/networkmanager/files/01-org.freedesktop.NetworkManager.settings.modify.system.rules?rev=1.1&view=markup
151 plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/net-misc/networkmanager/files/01-org.freedesktop.NetworkManager.settings.modify.system.rules?rev=1.1&content-type=text/plain
152
153 Index: 01-org.freedesktop.NetworkManager.settings.modify.system.rules
154 ===================================================================
155 // Let users in plugdev group modify NetworkManager
156 polkit.addRule(function(action, subject) {
157 if (action.id == "org.freedesktop.NetworkManager.settings.modify.system" &&
158 subject.isInGroup("plugdev") && subject.active) {
159 return "yes";
160 }
161 });