Commit eff1744e authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'rtnetlink-honour-nlm_f_echo-flag-in-rtnl_-new-del-link'

Hangbin Liu says:

====================
rtnetlink: Honour NLM_F_ECHO flag in rtnl_{new, del}link

Netlink messages are used for communicating between user and kernel space.
When user space configures the kernel with netlink messages, it can set the
NLM_F_ECHO flag to request the kernel to send the applied configuration back
to the caller. This allows user space to retrieve configuration information
that are filled by the kernel (either because these parameters can only be
set by the kernel or because user space let the kernel choose a default
value).

The kernel has support this feature in some places like RTM_{NEW, DEL}ADDR,
RTM_{NEW, DEL}ROUTE. This patch set handles NLM_F_ECHO flag and send link
info back after rtnl_{new, del}link.
====================

Link: https://lore.kernel.org/r/20221028084224.3509611-1-liuhangbin@gmail.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 37fe9b98 f3a63cce
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -236,7 +236,7 @@ static int vxcan_newlink(struct net *net, struct net_device *dev,

	netif_carrier_off(peer);

	err = rtnl_configure_link(peer, ifmp);
	err = rtnl_configure_link(peer, ifmp, 0, NULL);
	if (err < 0)
		goto unregister_network_device;

+1 −1
Original line number Diff line number Diff line
@@ -1907,7 +1907,7 @@ struct net_device *geneve_dev_create_fb(struct net *net, const char *name,
	if (err)
		goto err;

	err = rtnl_configure_link(dev, NULL);
	err = rtnl_configure_link(dev, NULL, 0, NULL);
	if (err < 0)
		goto err;

+1 −1
Original line number Diff line number Diff line
@@ -1773,7 +1773,7 @@ static int veth_newlink(struct net *src_net, struct net_device *dev,
	veth_disable_gro(peer);
	netif_carrier_off(peer);

	err = rtnl_configure_link(peer, ifmp);
	err = rtnl_configure_link(peer, ifmp, 0, NULL);
	if (err < 0)
		goto err_configure_peer;

+2 −2
Original line number Diff line number Diff line
@@ -3794,7 +3794,7 @@ static int __vxlan_dev_create(struct net *net, struct net_device *dev,
			goto errout;
	}

	err = rtnl_configure_link(dev, NULL);
	err = rtnl_configure_link(dev, NULL, 0, NULL);
	if (err < 0)
		goto unlink;

@@ -4416,7 +4416,7 @@ struct net_device *vxlan_dev_create(struct net *net, const char *name,
		return ERR_PTR(err);
	}

	err = rtnl_configure_link(dev, NULL);
	err = rtnl_configure_link(dev, NULL, 0, NULL);
	if (err < 0) {
		LIST_HEAD(list_kill);

+1 −1
Original line number Diff line number Diff line
@@ -1058,7 +1058,7 @@ static void wwan_create_default_link(struct wwan_device *wwandev,
		goto unlock;
	}

	rtnl_configure_link(dev, NULL); /* Link initialized, notify new link */
	rtnl_configure_link(dev, NULL, 0, NULL); /* Link initialized, notify new link */

unlock:
	rtnl_unlock();
Loading