summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* WIP: platform: drop route-managerth/platform-route-pt2Thomas Haller2017-08-112-0/+39
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, we would always add routes with netlink message flags NLM_F_CREATE | NLM_F_REPLACE, akin `ip route replace`. Using this form of RTM_NEWROUTE message, we could only add a certain route with a certain network/plen,metric triple once. That was already hugely inconvenient, because - when configuring routes, multiple (managed) interfaces may get conflicting routes. Only one of the routes can be actually configured using `ip route replace`, so we need to track routes that are currently shaddowed. - when configuring routes, we might replace externally configured routes on unmanaged interfaces. That was worked around by introducing NMRouteManager (and NMDefaultRouteManager). NMRouteManager would keep a list of the routes that NetworkManager would like to configure, even if momentarily being unable to do so due to conflicting routes. This worked mostly well but was rather complicated, involving bumping metrics (to avoid conflicts for device routes that were required to configure gateway routes). Drop that now. Use the corresponding of `ip route append` to configure routes. This allows NM to confiure (almost) all routes that it cares. Especially, it can configure all routes on a managed interface, without replacing/interfering with routes on other interfaces. Hence, NMRouteManager becomes mostly obsolete. This is a bit more complicated because: - when adding an IPv4 address, kernel will automatically create a device route for the subnet. We should avoid that using IFA_F_NOPREFIXROUTE flag for addresses (still to-do). But as kernel may not support that flag for IPv4 addresses yet, we still need functionality like nm_route_manager_ip4_route_register_device_route_purge_list(). This functionality now moves to NMDevice, which tracks a blacklist of device routes that shall be removed. - trying to configure an IPv6 route with a source address will be rejected by kernel, as long as the address is tentative (see related bug rh#1457196). Preferably, NMDevice keeps the list of routes that should be configured while kernel would have the list of what actually is configured. There is a feed-back loop where both affect each other (for example, when externally deleting a route, NMDevice must forget about it too). Previously, NMRouteManager would also keep track of routes that the device would like to configure, but currently cannot (due to conflicting routes on other devices). We want to get rid of that. However, with IPv6 routes with source addresses, we cannot. The tracking of such routes, that the device wants to configure, but currently cannot, also goes to NMDevice.
* platform: cleanup nmp_lookup_init_route_visible() lookup helperThomas Haller2017-08-119-71/+52
| | | | | | | | | | | | | nmp_lookup_init_route_visible() was originally named this way, to only return routes that are nmp_object_is_visible(). However, all routes are visible (as long as they are nmp_object_is_alive()). Hence, this is a historic misnomer. Also, passing @only_default FALSE is identical to the nmp_lookup_init_addrroute() lookup. So, rename the function to indicate it is a lookup for default routes only. Also, get rid of the unsupported ifindex argument for which there is no index.
* platform: drop workaround for deleting IPv4 routes with metric zeroThomas Haller2017-08-111-31/+0
| | | | | | | | | | | | | | | | | | Deleting an IPv4 route with metric zero will either delete the intended route, or if no such route exists, it will delete another existing route with different metric (but otherwise matching parameters). I think this is a shortcoming of the kernel API. It allows omitting the metric during delete. However, it gives not way to express to explicitly delete an IPv4 route with metric zero, but no other. Since we only delete routes that we obtain from the platform cache in the first place, we don't need the workaround. Of course, there is still a race that platform cache might be out of date at the moment we attempt to delete the route. Or the cache might be inconsistent, both cases leading to deletion of the wrong route. But such cases should be very rare, and only present when the user changes the routing table outside of NM.
* platform: fix cache to use kernel's notion for equality of routesThomas Haller2017-08-1111-379/+938
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Until now, NetworkManager's platform cache for routes used the quadruple network/plen,metric,ifindex for equaliy. That is not kernel's understanding of how routes behave. For example, with `ip route append` you can add two IPv4 routes that only differ by their gateway. To the previous form of platform cache, these two routes would wrongly look identical, as the cache could not contain both routes. This also easily leads to cache-inconsistencies. Now that we have NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID, fix the route's compare operator to match kernel's. Well, not entirely. Kernel understands more properties for routes then NetworkManager. Some of these properties may also be part of the ID according to kernel. To NetworkManager such routes would still look identical as they only differ in a property that is not understood. This can still cause cache-inconsistencies. The only fix here is to add support for all these properties in NetworkManager as well. However, it's less serious, because with this commit we support several of the more important properties. See also the related bug rh#1337855 for kernel. Another difficulty is that `ip route replace` and `ip route change` changes an existing route. The replaced route has the same NM_PLATFORM_IP_ROUTE_CMP_TYPE_WEAK_ID, but differ in the actual NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID: # ip -d -4 route show dev v # ip monitor route & # ip route add 192.168.5.0/24 dev v 192.168.5.0/24 dev v scope link # ip route change 192.168.5.0/24 dev v scope 10 192.168.5.0/24 dev v scope 10 # ip -d -4 route show dev v unicast 192.168.5.0/24 proto boot scope 10 Note that we only got one RTM_NEWROUTE message, although from NMPCache's point of view, a new route (with a particular ID) was added and another route (with a different ID) was deleted. The cumbersome workaround is, to keep an ordered list of the routes, and figure out which route was replaced in response to an RTM_NEWROUTE. In absence of bugs, this should work fine. However, as we only rely on events, we might wrongly introduce a cache-inconsistancy as well. See the related bug rh#1337860. Also drop nm_platform_ip4_route_get() and the like. The ID of routes is complex, so it makes little sense to look up a route directly.
* platform: preserve order of objects during dumpThomas Haller2017-08-115-25/+69
| | | | | | | | | | | | | | | | | | NMPCache can preserve the order of the objects. Until now, the order was however arbitrary. Soon we will require to preserve the order of routes. During a dump, force appending new objects at the end. That ensures, correct ordering during the dump. Note that we track objects in several distrinct indexes. Those partition the set of all objects. Outside a dump when receiving events about new objects (e.g. RTM_NEWROUTE), it is very unclear at which place the new object should be sorted. It is especially unclear, as an object might move from one partition (of an index) to another. In general, a deterministic order will only be useful in one particular instance: the NMP_CACHE_ID_TYPE_ROUTES_BY_DESTINATION index for routes. In this case, we will ensure a particular order of the routes.
* shared: add nm_dedup_multi_entry_reorder() functionThomas Haller2017-08-112-0/+62
| | | | This allows to reorder elements in NMDedupMultiIndex.
* platform: cleanup lookup API for objects in NMPCacheThomas Haller2017-08-113-21/+60
|
* platform: fix code comment for nmp_cache_remove_netlink()Thomas Haller2017-08-111-12/+9
|
* platform: improve logging of netlink messageThomas Haller2017-08-111-23/+92
| | | | Also log the nlmsg_flags, they will be useful for RTM_NEWROUTE messages.
* platform: simplify to-string output of IPv6 routes by dropping " src ::/0"Thomas Haller2017-08-111-4/+5
| | | | IPv6 routes without source are common. Simplify the output in this case.
* test: redirect glib logging to stdoutThomas Haller2017-08-111-0/+14
| | | | | | | Default g_log() logs to stdout for INFO level and higher, but logs to stderr for DEBUG/TRACE. That is annoying, because especially when redirecting the streams, the messages get mixed up. Install a log handler and just print to stdout for the tests.
* build: fix building src/systemdFrancesco Giudici2017-08-111-1/+3
| | | | | | | | While rebasing systemd from upstream the "sd-adapt/process-util.h" file was renamed and few other header files were added in the sources. Update Makefile.am. Fixes: e0cdaf9880929a40f60c1327cf67f800feefc951
* docs: fix spelling errors in tranlated strings and documentationThomas Haller2017-08-1171-139/+139
| | | | https://bugzilla.gnome.org/show_bug.cgi?id=786131
* systemd: merge branch systemd into masterBeniamino Galvani2017-08-1037-152/+1559
|\ | | | | | | | | | | - fix DHCP over Infiniband https://bugzilla.redhat.com/show_bug.cgi?id=1477678
| * systemd: update code from upstream (2017-08-09)Beniamino Galvani2017-08-0932-148/+1538
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a direct dump from systemd git on 2017-08-09, git commit c7f6ca9379279affa8f22d15fa13063491f86a49. ====== SYSTEMD_DIR=../systemd COMMIT=c7f6ca9379279affa8f22d15fa13063491f86a49 ( cd "$SYSTEMD_DIR" git checkout "$COMMIT" git reset --hard git clean -fdx ) git ls-files :/src/systemd/src/ | xargs -d '\n' rm -f nm_copy_sd() { mkdir -p "./src/systemd/$(dirname "$1")" cp "$SYSTEMD_DIR/$1" "./src/systemd/$1" } nm_copy_sd "src/basic/alloc-util.c" nm_copy_sd "src/basic/alloc-util.h" nm_copy_sd "src/basic/async.h" nm_copy_sd "src/basic/escape.c" nm_copy_sd "src/basic/escape.h" nm_copy_sd "src/basic/ether-addr-util.c" nm_copy_sd "src/basic/ether-addr-util.h" nm_copy_sd "src/basic/extract-word.c" nm_copy_sd "src/basic/extract-word.h" nm_copy_sd "src/basic/fileio.c" nm_copy_sd "src/basic/fileio.h" nm_copy_sd "src/basic/fd-util.c" nm_copy_sd "src/basic/fd-util.h" nm_copy_sd "src/basic/fs-util.c" nm_copy_sd "src/basic/fs-util.h" nm_copy_sd "src/basic/hash-funcs.c" nm_copy_sd "src/basic/hash-funcs.h" nm_copy_sd "src/basic/hashmap.c" nm_copy_sd "src/basic/hashmap.h" nm_copy_sd "src/basic/hexdecoct.c" nm_copy_sd "src/basic/hexdecoct.h" nm_copy_sd "src/basic/hostname-util.c" nm_copy_sd "src/basic/hostname-util.h" nm_copy_sd "src/basic/in-addr-util.c" nm_copy_sd "src/basic/in-addr-util.h" nm_copy_sd "src/basic/io-util.c" nm_copy_sd "src/basic/io-util.h" nm_copy_sd "src/basic/list.h" nm_copy_sd "src/basic/log.h" nm_copy_sd "src/basic/macro.h" nm_copy_sd "src/basic/mempool.h" nm_copy_sd "src/basic/mempool.c" nm_copy_sd "src/basic/parse-util.c" nm_copy_sd "src/basic/parse-util.h" nm_copy_sd "src/basic/path-util.c" nm_copy_sd "src/basic/path-util.h" nm_copy_sd "src/basic/prioq.h" nm_copy_sd "src/basic/prioq.c" nm_copy_sd "src/basic/process-util.h" nm_copy_sd "src/basic/process-util.c" nm_copy_sd "src/basic/random-util.c" nm_copy_sd "src/basic/random-util.h" nm_copy_sd "src/basic/refcnt.h" nm_copy_sd "src/basic/set.h" nm_copy_sd "src/basic/signal-util.h" nm_copy_sd "src/basic/siphash24.c" nm_copy_sd "src/basic/siphash24.h" nm_copy_sd "src/basic/socket-util.c" nm_copy_sd "src/basic/socket-util.h" nm_copy_sd "src/basic/sparse-endian.h" nm_copy_sd "src/basic/stdio-util.h" nm_copy_sd "src/basic/string-table.c" nm_copy_sd "src/basic/string-table.h" nm_copy_sd "src/basic/string-util.c" nm_copy_sd "src/basic/string-util.h" nm_copy_sd "src/basic/strv.c" nm_copy_sd "src/basic/strv.h" nm_copy_sd "src/basic/time-util.c" nm_copy_sd "src/basic/time-util.h" nm_copy_sd "src/basic/umask-util.h" nm_copy_sd "src/basic/unaligned.h" nm_copy_sd "src/basic/utf8.c" nm_copy_sd "src/basic/utf8.h" nm_copy_sd "src/basic/util.c" nm_copy_sd "src/basic/util.h" nm_copy_sd "src/libsystemd-network/arp-util.c" nm_copy_sd "src/libsystemd-network/arp-util.h" nm_copy_sd "src/libsystemd-network/dhcp6-internal.h" nm_copy_sd "src/libsystemd-network/dhcp6-lease-internal.h" nm_copy_sd "src/libsystemd-network/dhcp6-network.c" nm_copy_sd "src/libsystemd-network/dhcp6-option.c" nm_copy_sd "src/libsystemd-network/dhcp6-protocol.h" nm_copy_sd "src/libsystemd-network/dhcp-identifier.c" nm_copy_sd "src/libsystemd-network/dhcp-identifier.h" nm_copy_sd "src/libsystemd-network/dhcp-internal.h" nm_copy_sd "src/libsystemd-network/dhcp-lease-internal.h" nm_copy_sd "src/libsystemd-network/dhcp-network.c" nm_copy_sd "src/libsystemd-network/dhcp-option.c" nm_copy_sd "src/libsystemd-network/dhcp-packet.c" nm_copy_sd "src/libsystemd-network/dhcp-protocol.h" nm_copy_sd "src/libsystemd-network/lldp-internal.h" nm_copy_sd "src/libsystemd-network/lldp-neighbor.c" nm_copy_sd "src/libsystemd-network/lldp-neighbor.h" nm_copy_sd "src/libsystemd-network/lldp-network.c" nm_copy_sd "src/libsystemd-network/lldp-network.h" nm_copy_sd "src/libsystemd-network/network-internal.c" nm_copy_sd "src/libsystemd-network/network-internal.h" nm_copy_sd "src/libsystemd-network/sd-dhcp6-client.c" nm_copy_sd "src/libsystemd-network/sd-dhcp6-lease.c" nm_copy_sd "src/libsystemd-network/sd-dhcp-client.c" nm_copy_sd "src/libsystemd-network/sd-dhcp-lease.c" nm_copy_sd "src/libsystemd-network/sd-ipv4ll.c" nm_copy_sd "src/libsystemd-network/sd-ipv4acd.c" nm_copy_sd "src/libsystemd-network/sd-lldp.c" nm_copy_sd "src/libsystemd/sd-event/sd-event.c" nm_copy_sd "src/libsystemd/sd-id128/id128-util.c" nm_copy_sd "src/libsystemd/sd-id128/id128-util.h" nm_copy_sd "src/libsystemd/sd-id128/sd-id128.c" nm_copy_sd "src/shared/dns-domain.c" nm_copy_sd "src/shared/dns-domain.h" nm_copy_sd "src/systemd/_sd-common.h" nm_copy_sd "src/systemd/sd-dhcp6-client.h" nm_copy_sd "src/systemd/sd-dhcp6-lease.h" nm_copy_sd "src/systemd/sd-dhcp-client.h" nm_copy_sd "src/systemd/sd-dhcp-lease.h" nm_copy_sd "src/systemd/sd-event.h" nm_copy_sd "src/systemd/sd-ndisc.h" nm_copy_sd "src/systemd/sd-id128.h" nm_copy_sd "src/systemd/sd-ipv4acd.h" nm_copy_sd "src/systemd/sd-ipv4ll.h" nm_copy_sd "src/systemd/sd-lldp.h"
* | core: fix crash with bluetooth device factory wrongly claiming NAP connectionThomas Haller2017-08-062-4/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The bluetooth device *never* manages NAP connection. Hence, checking for nm_bt_vtable_network_server in "nm-bluez-manager.c" is wrong. Especially, because nm_bt_vtable_network_server is only initialized much later, so during initial start, the bluetooth factory would wronly claim to support it. This leads to a crash when having a NAP connection. Also, the bridge factory requires the bluetooth plugin. It should only claim to support NAP when the bluetooth plugin is present. That way, we get a proper "missing plugin" error message, instead of failing later during activation. It seems to me, distributing the logic to various match_connection() functions makes it more complicated, because the implementation is spread out and interact in complicated ways. Anyway. Fixes: 8665cdfefff50bb575eb03893d6361930bc8ad40
* | ppp: merge branch 'bg/ppp-bgo559134'Beniamino Galvani2017-08-0530-38/+774
|\ \ | | | | | | | | | | | | | | | Support for PPPoE on arbitrary devices. https://bugzilla.gnome.org/show_bug.cgi?id=559134
| * | core: ppp: use a different unit for each activationBeniamino Galvani2017-08-051-0/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We can't tell pppd to create an interface with a given name, so we use the name generated by kernel and rename the interface afterwards. A race condition can happen during the rename: NM receives the interface name from pppd, but in the meantime the interface could be deleted and another one with that name could appear. In this case we would rename the wrong interface. Using a changing unit index, we ensure that interfaces created by NM don't race with each others. There is still the chance to race with externally-created interfaces, but I guess this is not easily solvable since the pppd plugin does not expose the ifindex. When the specified unit is already in use, the kernel selects another one.
| * | device: use ppp device for new style pppoe settingBeniamino Galvani2017-08-052-0/+23
| | |
| * | core: implement activation of PPP devicesBeniamino Galvani2017-08-055-3/+293
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add code to NMPppDevice to activate new-style PPPoE connections. This is a bit tricky because we can't create the link as usual in create_and_realize(). Instead, we create a device without ifindex and start pppd in stage2; when pppd reports a new configuration, we rename the platform link to the correct name and set the ifindex into the device. This mechanism is inherently racy, but there is no way to tell pppd to create an arbitrary interface name.
| * | device: accept NULL plinkBeniamino Galvani2017-08-051-2/+4
| | | | | | | | | | | | | | | For PPP devices we can't create a link in advance, as the link is created by pppd when the connection is established.
| * | core: device-factory: implement match_connection()Beniamino Galvani2017-08-054-27/+74
| | | | | | | | | | | | | | | | | | | | | | | | | | | Make it possible to register different factories for the same setting type, and add a match_connection() method to let each factory decide if it's capable of handling a connection. This will be used to decide whether a PPPoE connection must be handled through the legacy Ethernet factory or through the new PPP factory.
| * | device: add NMDevicePPPBeniamino Galvani2017-08-0515-3/+257
| | | | | | | | | | | | | | | | | | The new device type represents a PPP interface, and will implement the activation of new-style PPPoE connections, i.e. the ones that don't claim the parent device.
| * | platform: add nm_platform_link_set_name()Beniamino Galvani2017-08-053-0/+50
| | | | | | | | | | | | We'll need it to rename the new PPP interface to a given name.
| * | libnm,clients: add 'parent' property to PPPoE settingBeniamino Galvani2017-08-055-0/+66
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When the property is set, it specifies the device on which PPPoE is to be started. The ppp interface will be named as the connection.interface-name property. When the property is not set the previous behavior will be retained, i.e. the PPPoE connection will be started on connection.interface-name and the PPP interface will have a random name.
| * | device: ethernet: remove unused private memberBeniamino Galvani2017-08-051-6/+0
|/ /
* | platform: merge branch 'th/platform-route-pt1-bgo785449'Thomas Haller2017-08-0321-702/+956
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - extend platform's route-compare() functions with a mode argument. Most important is the new mode NM_PLATFORM_IP_ROUTE_CMP_TYPE_ID, which corresponds kernels ID of how routes compare. - when deleting routes, set all known parameters in the netlink message. Previously we would omit paramters, but that causes kernel to delete the first matching route. - cleanup fields of routes https://bugzilla.gnome.org/show_bug.cgi?id=785449
| * | platform: extend API for adding routesThomas Haller2017-08-039-105/+138
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Via the flags of the RTM_NEWROUTE netlink message, kernel and iproute2 support various variants to add a route. - ip route add - ip route change - ip route replace - ip route prepend - ip route append - ip route test Previously, our nm_platform_ip4_route_add() function was basically `ip route replace`. In the future, we should rather user `ip route append` instead. Anyway, expose the netlink message flags in the API. This allows to use the various forms, and makes it also more apparent to the user that they even exist.
| * | platform,libnm: cleanup handling of TOS for routesThomas Haller2017-08-037-32/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - kernel ignores rtm_tos for IPv6 routes. While iproute2 accepts it, let libnm reject TOS attribute for routes as well. - move the tos field from NMPlatformIPRoute to NMPlatformIP4Route. - the tos field is part of the weak-id of an IPv4 route. Meaning, `ip route add` can add routes that only differ by their TOS.
| * | ifcfg-rh: fix writing/reading TOS for routes in hexadecimalThomas Haller2017-08-032-2/+2
| | | | | | | | | | | | | | | | | | iproute2 expects TOS in hex. This is a change in behavior.
| * | core: implement NMIP4Config's and NMIP6Config's route equality based on ↵Thomas Haller2017-08-033-8/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | nm_platform_ipx_route_cmp() There are various notions of how to compare routes. Collect them all in nm_platform_ip4_route_cmp(), nm_platform_ip4_route_hash(), nm_platform_ip6_route_cmp(), and nm_platform_ip6_route_hash(). This way, we have them side-by-side, which makes the differences more discoverable.
| * | platform: cleanup handling metric paramters for non-exclusive routesThomas Haller2017-08-033-32/+33
| | |
| * | platform: cleanup handling locks for non-exclusive routesThomas Haller2017-08-033-30/+39
| | |
| * | platform: print lock paramters of routeThomas Haller2017-08-031-30/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It is valid to set "lock" for a property with numeric value 0. # ip route append 192.168.7.0/24 dev bond0 window lock 0 # ip route append 192.168.7.0/24 dev bond0 window 0 # ip route append 192.168.7.0/24 dev bond0 window lock 10 # ip route append 192.168.7.0/24 dev bond0 window 10 # ip -4 -d route show dev bond0 unicast 192.168.7.0/24 proto boot scope link linkdown unicast 192.168.7.0/24 proto boot scope link linkdown unicast 192.168.7.0/24 proto boot scope link linkdown window lock 10 unicast 192.168.7.0/24 proto boot scope link linkdown window 10 Our to-string methods should accurately print the content of the routes. Note that iproute2 fails to do so too.
| * | platform: cleanup handling "window" for non-exclusive routesThomas Haller2017-08-033-14/+26
| | |
| * | platform: use route src/src_plen when deleting IPv6 routeThomas Haller2017-08-033-18/+39
| | |
| * | platform: use route pref_src when deleting IP routeThomas Haller2017-08-033-8/+20
| | |
| * | platform: use route mss when deleting IP routeThomas Haller2017-08-033-7/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The mss (advmss, RTA_METRICS.RTAX_ADVMSS) is in a way part of the ID for IPv4 routes. That is, you can add multiple IPv4 routes, that only differ by mss. On the other hand, that is not the case for IPv6. Two IPv6 routes that only differ by mss are considered the same. Another issue is, that you cannot selectively delete an IPv4 route based on the mss: ip netns del x ip netns add x IP() { ip netns exec x ip "$@" } IP link add type veth IP link set veth0 name v IP link set veth1 up IP link set v up IP route append 192.168.7.0/24 dev v advmss 6 IP route append 192.168.7.0/24 dev v advmss 7 IP -d route show dev v IP route delete 192.168.7.0/24 dev v advmss 7 IP -d route show dev v It seems for deleting routes, kernel ignores mss (which doesn't really matter for IPv6, but does so for IPv4).
| * | platform: use correct gateway for deleting routeThomas Haller2017-08-033-9/+19
| | | | | | | | | | | | | | | Routes may only differ by their gateway. When deleting a route, we must specify the exact gateway to delete.
| * | platform: use correct scope for deleting IPv4 routeThomas Haller2017-08-033-9/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Refactor _nl_msg_new_route() to obtain the route scope (rtm_scope) from the NMPObject, instead of a separate argument. That way, when deleting an IPv4 route, we don't pick the first route that matches (RT_SCOPE_NOWHERE), but use the actual scope of the route that we want to delete. That matters, if there are more then one otherwise identical routes that only differ by their scope. For kernel, the scope of IPv6 routes is always global (RT_SCOPE_UNIVERSE). Also, during ip4_route_add() initialize the intermediate @obj to have the values as we expect them after adding the route. That is necessary to use it in _nl_msg_new_route(). But also nicer for consistency. Also, move the scope_inv field in NMPlatformIP4Route to let the other in_addr_t fields life side by side.
| * | platform: use proper rt_source of route for add and deleteThomas Haller2017-08-033-8/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | _nl_msg_new_route() should not get extra arguments, but instead use all parameters from the NMPObject argument. This will allow during nm_platform_ip_route_delete() to pick the exact route that should be deleted. Also, in ip4_route_add()/ip6_route_add(), keep the stack-allocated @obj object consistent with what we expect to add. That is, set the rt_source argument to the value of what the route will have after kernel adds it. That might be necessary, because do_add_addrroute() searches the cache for @obj.
| * | platform: drop duplicate cmd_obj_stackinit_id() virtual functionThomas Haller2017-08-032-40/+3
| | | | | | | | | | | | It can be implemented solely based on cmd_plobj_id_copy().
| * | platform: add compare functions for routes with different compare semanticsThomas Haller2017-08-0311-178/+310
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Routes are complicated. `ip route add` and `ip route append` behaves differently with respect to determine whether an existing route is idential or not. Extend the cmp() and hash() functions to have a compare type, that covers the different semantics.
| * | core: add nm_utils_ip6_address_same_prefix_cmp() helperThomas Haller2017-07-312-18/+37
| | | | | | | | | | | | Useful for sorting/comparing.
| * | shared: cleanup NM_CMP_*() macrosThomas Haller2017-07-312-64/+74
| | |
| * | shared: move NM_CMP_*() helper macros to shared headerThomas Haller2017-07-312-75/+77
| | |
| * | platform/trivial: rename cmp helper macrosThomas Haller2017-07-311-221/+221
|/ /
* | platform: fix failed assertion with cloned routeBeniamino Galvani2017-07-311-3/+5
| | | | | | | | | | | | | | platform-linux: event-notification: NEWROUTE, seq 5: fd02::2/128 via fd01::1 dev 17 metric 0 mss 0 rt-src rt-unspec src ::/0 cloned mtu 1400 NetworkManager:ERROR:src/platform/nmp-object.h:614:ASSERT_nmp_cache_ops: assertion failed: (obj_old || obj_new) Fixes: 9440eefb6dc4939752bf049d1669a0a4d37213c2
* | ppp: fix generation of IP config received from pppdBeniamino Galvani2017-07-281-15/+15
| | | | | | | | | | | | | | | | Since commit 22edeb5b691b ("core: track addresses for NMIP4Config/NMIP6Config via NMDedupMultiIndex"), addresses can be added to a IP config only after the ifindex has been set. Fixes: 22edeb5b691befd796c534cf71901b32f0b7945b
* | core: fix IPv6 address lookupBeniamino Galvani2017-07-271-1/+1
| | | | | | | | Fixes: 22edeb5b691befd796c534cf71901b32f0b7945b