[prev in list] [next in list] [prev in thread] [next in thread]
List: busybox
Subject: Re: [PATCH 2/2] iplink: implement support for selecting a master interface
From: Denys Vlasenko <vda.linux () googlemail ! com>
Date: 2018-02-20 18:45:36
Message-ID: CAK1hOcPt+1bOSd476fWeS3XCzA=ViB8Dz7LAJfmcCM5F4ASBAA () mail ! gmail ! com
[Download RAW message or body]
Applied both, thanks.
On Wed, Feb 14, 2018 at 2:05 PM, Jan Luebbe <jluebbe@debian.org> wrote:
> Attaching an interface to a VRF is done by setting the interface's
> master. Besides VRF, this can also be used for bridges.
>
> function old new delta
> set_master - 180 +180
> do_iplink 1304 1377 +73
> .rodata 149338 149364 +26
> packed_usage 32437 32429 -8
> ------------------------------------------------------------------------------
> (add/remove: 1/0 grow/shrink: 2/1 up/down: 279/-8) Total: 271 bytes
>
> Signed-off-by: Jan Luebbe <jluebbe@debian.org>
> ---
> networking/ip.c | 2 +-
> networking/libiproute/iplink.c | 36 ++++++++++++++++++++++++++++++++++++
> 2 files changed, 37 insertions(+), 1 deletion(-)
>
> diff --git a/networking/ip.c b/networking/ip.c
> index 0bc0edc57..5aa3e6470 100644
> --- a/networking/ip.c
> +++ b/networking/ip.c
> @@ -158,7 +158,7 @@
> //usage: "set IFACE [up|down] [arp on|off] | show [IFACE]"
> //usage:#define iplink_full_usage "\n\n"
> //usage: "iplink set IFACE [up|down] [arp on|off] [multicast on|off] [promisc on|off]\n"
> -//usage: " [mtu NUM] [name NAME] [qlen NUM] [address MAC]\n"
> +//usage: " [mtu NUM] [name NAME] [qlen NUM] [address MAC] [master IFACE] [nomaster]\n"
> //usage: "iplink show [IFACE]"
> //usage:
> //--------------123456789.123456789.123456789.123456789.123456789.123456789.123456789.123....79
> diff --git a/networking/libiproute/iplink.c b/networking/libiproute/iplink.c
> index 61b18231d..e0bf21659 100644
> --- a/networking/libiproute/iplink.c
> +++ b/networking/libiproute/iplink.c
> @@ -128,6 +128,31 @@ static void set_mtu(char *dev, int mtu)
> }
>
> /* Exits on error */
> +static void set_master(char *dev, int master)
> +{
> + struct rtnl_handle rth;
> + struct {
> + struct nlmsghdr n;
> + struct ifinfomsg i;
> + char buf[1024];
> + } req;
> +
> + memset(&req, 0, sizeof(req));
> +
> + req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifinfomsg));
> + req.n.nlmsg_flags = NLM_F_REQUEST;
> + req.n.nlmsg_type = RTM_NEWLINK;
> + req.i.ifi_family = preferred_family;
> +
> + xrtnl_open(&rth);
> + req.i.ifi_index = xll_name_to_index(dev);
> + printf("master %i for %i\n", master, req.i.ifi_index);
> + addattr_l(&req.n, sizeof(req), IFLA_MASTER, &master, 4);
> + if (rtnl_talk(&rth, &req.n, 0, 0, NULL, NULL, NULL) < 0)
> + exit(EXIT_FAILURE);
> +}
> +
> +/* Exits on error */
> static int get_address(char *dev, int *htype)
> {
> struct ifreq ifr;
> @@ -200,6 +225,7 @@ static int do_set(char **argv)
> uint32_t flags = 0;
> int qlen = -1;
> int mtu = -1;
> + int master = -1;
> char *newaddr = NULL;
> char *newbrd = NULL;
> struct ifreq ifr0, ifr1;
> @@ -209,9 +235,11 @@ static int do_set(char **argv)
> static const char keywords[] ALIGN1 =
> "up\0""down\0""name\0""mtu\0""qlen\0""multicast\0"
> "arp\0""promisc\0""address\0"
> + "master\0""nomaster\0"
> "dev\0" /* must be last */;
> enum { ARG_up = 0, ARG_down, ARG_name, ARG_mtu, ARG_qlen, ARG_multicast,
> ARG_arp, ARG_promisc, ARG_addr,
> + ARG_master, ARG_nomaster,
> ARG_dev };
> enum { PARM_on = 0, PARM_off };
> smalluint key;
> @@ -243,6 +271,11 @@ static int do_set(char **argv)
> } else if (key == ARG_addr) {
> NEXT_ARG();
> newaddr = *argv;
> + } else if (key == ARG_master) {
> + NEXT_ARG();
> + master = xll_name_to_index(*argv);
> + } else if (key == ARG_nomaster) {
> + master = 0;
> } else if (key >= ARG_dev) {
> /* ^^^^^^ ">=" here results in "dev IFACE" treated as default */
> if (key == ARG_dev) {
> @@ -427,6 +460,9 @@ static int do_set(char **argv)
> if (mtu != -1) {
> set_mtu(dev, mtu);
> }
> + if (master != -1) {
> + set_master(dev, master);
> + }
> if (mask)
> do_chflags(dev, flags, mask);
> return 0;
> --
> 2.11.0
>
> _______________________________________________
> busybox mailing list
> busybox@busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic