Linux Audio

Check our new training course

Linux debugging, profiling, tracing and performance analysis training

Apr 14-17, 2025
Register
Loading...
v3.1
   1/*
   2 * INET		An implementation of the TCP/IP protocol suite for the LINUX
   3 *		operating system.  INET is implemented using the  BSD Socket
   4 *		interface as the means of communication with the user level.
   5 *
   6 *		Routing netlink socket interface: protocol independent part.
   7 *
   8 * Authors:	Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
   9 *
  10 *		This program is free software; you can redistribute it and/or
  11 *		modify it under the terms of the GNU General Public License
  12 *		as published by the Free Software Foundation; either version
  13 *		2 of the License, or (at your option) any later version.
  14 *
  15 *	Fixes:
  16 *	Vitaly E. Lavrov		RTA_OK arithmetics was wrong.
  17 */
  18
  19#include <linux/errno.h>
  20#include <linux/module.h>
  21#include <linux/types.h>
  22#include <linux/socket.h>
  23#include <linux/kernel.h>
  24#include <linux/timer.h>
  25#include <linux/string.h>
  26#include <linux/sockios.h>
  27#include <linux/net.h>
  28#include <linux/fcntl.h>
  29#include <linux/mm.h>
  30#include <linux/slab.h>
  31#include <linux/interrupt.h>
  32#include <linux/capability.h>
  33#include <linux/skbuff.h>
  34#include <linux/init.h>
  35#include <linux/security.h>
  36#include <linux/mutex.h>
  37#include <linux/if_addr.h>
 
 
  38#include <linux/pci.h>
 
  39
  40#include <asm/uaccess.h>
  41#include <asm/system.h>
  42
  43#include <linux/inet.h>
  44#include <linux/netdevice.h>
 
  45#include <net/ip.h>
  46#include <net/protocol.h>
  47#include <net/arp.h>
  48#include <net/route.h>
  49#include <net/udp.h>
 
  50#include <net/sock.h>
  51#include <net/pkt_sched.h>
  52#include <net/fib_rules.h>
  53#include <net/rtnetlink.h>
  54#include <net/net_namespace.h>
  55
  56struct rtnl_link {
  57	rtnl_doit_func		doit;
  58	rtnl_dumpit_func	dumpit;
  59	rtnl_calcit_func 	calcit;
  60};
  61
  62static DEFINE_MUTEX(rtnl_mutex);
  63static u16 min_ifinfo_dump_size;
  64
  65void rtnl_lock(void)
  66{
  67	mutex_lock(&rtnl_mutex);
  68}
  69EXPORT_SYMBOL(rtnl_lock);
  70
 
 
 
 
 
 
 
 
 
 
  71void __rtnl_unlock(void)
  72{
 
 
 
 
  73	mutex_unlock(&rtnl_mutex);
 
 
 
 
 
 
 
 
  74}
  75
  76void rtnl_unlock(void)
  77{
  78	/* This fellow will unlock it for us. */
  79	netdev_run_todo();
  80}
  81EXPORT_SYMBOL(rtnl_unlock);
  82
  83int rtnl_trylock(void)
  84{
  85	return mutex_trylock(&rtnl_mutex);
  86}
  87EXPORT_SYMBOL(rtnl_trylock);
  88
  89int rtnl_is_locked(void)
  90{
  91	return mutex_is_locked(&rtnl_mutex);
  92}
  93EXPORT_SYMBOL(rtnl_is_locked);
  94
  95#ifdef CONFIG_PROVE_LOCKING
  96int lockdep_rtnl_is_held(void)
  97{
  98	return lockdep_is_held(&rtnl_mutex);
  99}
 100EXPORT_SYMBOL(lockdep_rtnl_is_held);
 101#endif /* #ifdef CONFIG_PROVE_LOCKING */
 102
 103static struct rtnl_link *rtnl_msg_handlers[RTNL_FAMILY_MAX + 1];
 104
 105static inline int rtm_msgindex(int msgtype)
 106{
 107	int msgindex = msgtype - RTM_BASE;
 108
 109	/*
 110	 * msgindex < 0 implies someone tried to register a netlink
 111	 * control code. msgindex >= RTM_NR_MSGTYPES may indicate that
 112	 * the message type has not been added to linux/rtnetlink.h
 113	 */
 114	BUG_ON(msgindex < 0 || msgindex >= RTM_NR_MSGTYPES);
 115
 116	return msgindex;
 117}
 118
 119static rtnl_doit_func rtnl_get_doit(int protocol, int msgindex)
 120{
 121	struct rtnl_link *tab;
 122
 123	if (protocol <= RTNL_FAMILY_MAX)
 124		tab = rtnl_msg_handlers[protocol];
 125	else
 126		tab = NULL;
 127
 128	if (tab == NULL || tab[msgindex].doit == NULL)
 129		tab = rtnl_msg_handlers[PF_UNSPEC];
 130
 131	return tab ? tab[msgindex].doit : NULL;
 132}
 133
 134static rtnl_dumpit_func rtnl_get_dumpit(int protocol, int msgindex)
 135{
 136	struct rtnl_link *tab;
 137
 138	if (protocol <= RTNL_FAMILY_MAX)
 139		tab = rtnl_msg_handlers[protocol];
 140	else
 141		tab = NULL;
 142
 143	if (tab == NULL || tab[msgindex].dumpit == NULL)
 144		tab = rtnl_msg_handlers[PF_UNSPEC];
 145
 146	return tab ? tab[msgindex].dumpit : NULL;
 147}
 148
 149static rtnl_calcit_func rtnl_get_calcit(int protocol, int msgindex)
 150{
 151	struct rtnl_link *tab;
 152
 153	if (protocol <= RTNL_FAMILY_MAX)
 154		tab = rtnl_msg_handlers[protocol];
 155	else
 156		tab = NULL;
 157
 158	if (tab == NULL || tab[msgindex].calcit == NULL)
 159		tab = rtnl_msg_handlers[PF_UNSPEC];
 160
 161	return tab ? tab[msgindex].calcit : NULL;
 162}
 163
 164/**
 165 * __rtnl_register - Register a rtnetlink message type
 166 * @protocol: Protocol family or PF_UNSPEC
 167 * @msgtype: rtnetlink message type
 168 * @doit: Function pointer called for each request message
 169 * @dumpit: Function pointer called for each dump request (NLM_F_DUMP) message
 170 * @calcit: Function pointer to calc size of dump message
 171 *
 172 * Registers the specified function pointers (at least one of them has
 173 * to be non-NULL) to be called whenever a request message for the
 174 * specified protocol family and message type is received.
 175 *
 176 * The special protocol family PF_UNSPEC may be used to define fallback
 177 * function pointers for the case when no entry for the specific protocol
 178 * family exists.
 179 *
 180 * Returns 0 on success or a negative error code.
 181 */
 182int __rtnl_register(int protocol, int msgtype,
 183		    rtnl_doit_func doit, rtnl_dumpit_func dumpit,
 184		    rtnl_calcit_func calcit)
 185{
 186	struct rtnl_link *tab;
 187	int msgindex;
 188
 189	BUG_ON(protocol < 0 || protocol > RTNL_FAMILY_MAX);
 190	msgindex = rtm_msgindex(msgtype);
 191
 192	tab = rtnl_msg_handlers[protocol];
 193	if (tab == NULL) {
 194		tab = kcalloc(RTM_NR_MSGTYPES, sizeof(*tab), GFP_KERNEL);
 195		if (tab == NULL)
 196			return -ENOBUFS;
 197
 198		rtnl_msg_handlers[protocol] = tab;
 199	}
 200
 201	if (doit)
 202		tab[msgindex].doit = doit;
 203
 204	if (dumpit)
 205		tab[msgindex].dumpit = dumpit;
 206
 207	if (calcit)
 208		tab[msgindex].calcit = calcit;
 209
 210	return 0;
 211}
 212EXPORT_SYMBOL_GPL(__rtnl_register);
 213
 214/**
 215 * rtnl_register - Register a rtnetlink message type
 216 *
 217 * Identical to __rtnl_register() but panics on failure. This is useful
 218 * as failure of this function is very unlikely, it can only happen due
 219 * to lack of memory when allocating the chain to store all message
 220 * handlers for a protocol. Meant for use in init functions where lack
 221 * of memory implies no sense in continuing.
 222 */
 223void rtnl_register(int protocol, int msgtype,
 224		   rtnl_doit_func doit, rtnl_dumpit_func dumpit,
 225		   rtnl_calcit_func calcit)
 226{
 227	if (__rtnl_register(protocol, msgtype, doit, dumpit, calcit) < 0)
 228		panic("Unable to register rtnetlink message handler, "
 229		      "protocol = %d, message type = %d\n",
 230		      protocol, msgtype);
 231}
 232EXPORT_SYMBOL_GPL(rtnl_register);
 233
 234/**
 235 * rtnl_unregister - Unregister a rtnetlink message type
 236 * @protocol: Protocol family or PF_UNSPEC
 237 * @msgtype: rtnetlink message type
 238 *
 239 * Returns 0 on success or a negative error code.
 240 */
 241int rtnl_unregister(int protocol, int msgtype)
 242{
 243	int msgindex;
 244
 245	BUG_ON(protocol < 0 || protocol > RTNL_FAMILY_MAX);
 246	msgindex = rtm_msgindex(msgtype);
 247
 248	if (rtnl_msg_handlers[protocol] == NULL)
 249		return -ENOENT;
 250
 251	rtnl_msg_handlers[protocol][msgindex].doit = NULL;
 252	rtnl_msg_handlers[protocol][msgindex].dumpit = NULL;
 
 253
 254	return 0;
 255}
 256EXPORT_SYMBOL_GPL(rtnl_unregister);
 257
 258/**
 259 * rtnl_unregister_all - Unregister all rtnetlink message type of a protocol
 260 * @protocol : Protocol family or PF_UNSPEC
 261 *
 262 * Identical to calling rtnl_unregster() for all registered message types
 263 * of a certain protocol family.
 264 */
 265void rtnl_unregister_all(int protocol)
 266{
 267	BUG_ON(protocol < 0 || protocol > RTNL_FAMILY_MAX);
 268
 269	kfree(rtnl_msg_handlers[protocol]);
 270	rtnl_msg_handlers[protocol] = NULL;
 271}
 272EXPORT_SYMBOL_GPL(rtnl_unregister_all);
 273
 274static LIST_HEAD(link_ops);
 275
 
 
 
 
 
 
 
 
 
 
 
 276/**
 277 * __rtnl_link_register - Register rtnl_link_ops with rtnetlink.
 278 * @ops: struct rtnl_link_ops * to register
 279 *
 280 * The caller must hold the rtnl_mutex. This function should be used
 281 * by drivers that create devices during module initialization. It
 282 * must be called before registering the devices.
 283 *
 284 * Returns 0 on success or a negative error code.
 285 */
 286int __rtnl_link_register(struct rtnl_link_ops *ops)
 287{
 288	if (!ops->dellink)
 
 
 
 
 
 
 
 
 289		ops->dellink = unregister_netdevice_queue;
 290
 291	list_add_tail(&ops->list, &link_ops);
 292	return 0;
 293}
 294EXPORT_SYMBOL_GPL(__rtnl_link_register);
 295
 296/**
 297 * rtnl_link_register - Register rtnl_link_ops with rtnetlink.
 298 * @ops: struct rtnl_link_ops * to register
 299 *
 300 * Returns 0 on success or a negative error code.
 301 */
 302int rtnl_link_register(struct rtnl_link_ops *ops)
 303{
 304	int err;
 305
 306	rtnl_lock();
 307	err = __rtnl_link_register(ops);
 308	rtnl_unlock();
 309	return err;
 310}
 311EXPORT_SYMBOL_GPL(rtnl_link_register);
 312
 313static void __rtnl_kill_links(struct net *net, struct rtnl_link_ops *ops)
 314{
 315	struct net_device *dev;
 316	LIST_HEAD(list_kill);
 317
 318	for_each_netdev(net, dev) {
 319		if (dev->rtnl_link_ops == ops)
 320			ops->dellink(dev, &list_kill);
 321	}
 322	unregister_netdevice_many(&list_kill);
 323}
 324
 325/**
 326 * __rtnl_link_unregister - Unregister rtnl_link_ops from rtnetlink.
 327 * @ops: struct rtnl_link_ops * to unregister
 328 *
 329 * The caller must hold the rtnl_mutex.
 330 */
 331void __rtnl_link_unregister(struct rtnl_link_ops *ops)
 332{
 333	struct net *net;
 334
 335	for_each_net(net) {
 336		__rtnl_kill_links(net, ops);
 337	}
 338	list_del(&ops->list);
 339}
 340EXPORT_SYMBOL_GPL(__rtnl_link_unregister);
 341
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 342/**
 343 * rtnl_link_unregister - Unregister rtnl_link_ops from rtnetlink.
 344 * @ops: struct rtnl_link_ops * to unregister
 345 */
 346void rtnl_link_unregister(struct rtnl_link_ops *ops)
 347{
 348	rtnl_lock();
 
 
 349	__rtnl_link_unregister(ops);
 350	rtnl_unlock();
 
 351}
 352EXPORT_SYMBOL_GPL(rtnl_link_unregister);
 353
 354static const struct rtnl_link_ops *rtnl_link_ops_get(const char *kind)
 355{
 
 356	const struct rtnl_link_ops *ops;
 357
 358	list_for_each_entry(ops, &link_ops, list) {
 359		if (!strcmp(ops->kind, kind))
 360			return ops;
 361	}
 362	return NULL;
 
 
 
 
 363}
 364
 365static size_t rtnl_link_get_size(const struct net_device *dev)
 366{
 367	const struct rtnl_link_ops *ops = dev->rtnl_link_ops;
 368	size_t size;
 369
 370	if (!ops)
 371		return 0;
 372
 373	size = nla_total_size(sizeof(struct nlattr)) + /* IFLA_LINKINFO */
 374	       nla_total_size(strlen(ops->kind) + 1);  /* IFLA_INFO_KIND */
 375
 376	if (ops->get_size)
 377		/* IFLA_INFO_DATA + nested data */
 378		size += nla_total_size(sizeof(struct nlattr)) +
 379			ops->get_size(dev);
 380
 381	if (ops->get_xstats_size)
 382		/* IFLA_INFO_XSTATS */
 383		size += nla_total_size(ops->get_xstats_size(dev));
 384
 
 
 385	return size;
 386}
 387
 388static LIST_HEAD(rtnl_af_ops);
 389
 390static const struct rtnl_af_ops *rtnl_af_lookup(const int family)
 391{
 392	const struct rtnl_af_ops *ops;
 393
 394	list_for_each_entry(ops, &rtnl_af_ops, list) {
 395		if (ops->family == family)
 396			return ops;
 397	}
 398
 399	return NULL;
 400}
 401
 402/**
 403 * __rtnl_af_register - Register rtnl_af_ops with rtnetlink.
 404 * @ops: struct rtnl_af_ops * to register
 405 *
 406 * The caller must hold the rtnl_mutex.
 407 *
 408 * Returns 0 on success or a negative error code.
 409 */
 410int __rtnl_af_register(struct rtnl_af_ops *ops)
 411{
 412	list_add_tail(&ops->list, &rtnl_af_ops);
 413	return 0;
 414}
 415EXPORT_SYMBOL_GPL(__rtnl_af_register);
 416
 417/**
 418 * rtnl_af_register - Register rtnl_af_ops with rtnetlink.
 419 * @ops: struct rtnl_af_ops * to register
 420 *
 421 * Returns 0 on success or a negative error code.
 422 */
 423int rtnl_af_register(struct rtnl_af_ops *ops)
 424{
 425	int err;
 426
 427	rtnl_lock();
 428	err = __rtnl_af_register(ops);
 429	rtnl_unlock();
 430	return err;
 431}
 432EXPORT_SYMBOL_GPL(rtnl_af_register);
 433
 434/**
 435 * __rtnl_af_unregister - Unregister rtnl_af_ops from rtnetlink.
 436 * @ops: struct rtnl_af_ops * to unregister
 437 *
 438 * The caller must hold the rtnl_mutex.
 439 */
 440void __rtnl_af_unregister(struct rtnl_af_ops *ops)
 441{
 442	list_del(&ops->list);
 443}
 444EXPORT_SYMBOL_GPL(__rtnl_af_unregister);
 445
 446/**
 447 * rtnl_af_unregister - Unregister rtnl_af_ops from rtnetlink.
 448 * @ops: struct rtnl_af_ops * to unregister
 449 */
 450void rtnl_af_unregister(struct rtnl_af_ops *ops)
 451{
 452	rtnl_lock();
 453	__rtnl_af_unregister(ops);
 454	rtnl_unlock();
 455}
 456EXPORT_SYMBOL_GPL(rtnl_af_unregister);
 457
 458static size_t rtnl_link_get_af_size(const struct net_device *dev)
 
 459{
 460	struct rtnl_af_ops *af_ops;
 461	size_t size;
 462
 463	/* IFLA_AF_SPEC */
 464	size = nla_total_size(sizeof(struct nlattr));
 465
 466	list_for_each_entry(af_ops, &rtnl_af_ops, list) {
 467		if (af_ops->get_link_af_size) {
 468			/* AF_* + nested data */
 469			size += nla_total_size(sizeof(struct nlattr)) +
 470				af_ops->get_link_af_size(dev);
 471		}
 472	}
 473
 474	return size;
 475}
 476
 477static int rtnl_link_fill(struct sk_buff *skb, const struct net_device *dev)
 478{
 479	const struct rtnl_link_ops *ops = dev->rtnl_link_ops;
 480	struct nlattr *linkinfo, *data;
 481	int err = -EMSGSIZE;
 482
 483	linkinfo = nla_nest_start(skb, IFLA_LINKINFO);
 484	if (linkinfo == NULL)
 485		goto out;
 
 
 
 
 
 
 
 
 
 
 486
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 487	if (nla_put_string(skb, IFLA_INFO_KIND, ops->kind) < 0)
 488		goto err_cancel_link;
 489	if (ops->fill_xstats) {
 490		err = ops->fill_xstats(skb, dev);
 491		if (err < 0)
 492			goto err_cancel_link;
 493	}
 494	if (ops->fill_info) {
 495		data = nla_nest_start(skb, IFLA_INFO_DATA);
 496		if (data == NULL)
 497			goto err_cancel_link;
 498		err = ops->fill_info(skb, dev);
 499		if (err < 0)
 500			goto err_cancel_data;
 501		nla_nest_end(skb, data);
 502	}
 503
 504	nla_nest_end(skb, linkinfo);
 505	return 0;
 506
 507err_cancel_data:
 508	nla_nest_cancel(skb, data);
 509err_cancel_link:
 510	nla_nest_cancel(skb, linkinfo);
 511out:
 512	return err;
 513}
 514
 515static const int rtm_min[RTM_NR_FAMILIES] =
 516{
 517	[RTM_FAM(RTM_NEWLINK)]      = NLMSG_LENGTH(sizeof(struct ifinfomsg)),
 518	[RTM_FAM(RTM_NEWADDR)]      = NLMSG_LENGTH(sizeof(struct ifaddrmsg)),
 519	[RTM_FAM(RTM_NEWROUTE)]     = NLMSG_LENGTH(sizeof(struct rtmsg)),
 520	[RTM_FAM(RTM_NEWRULE)]      = NLMSG_LENGTH(sizeof(struct fib_rule_hdr)),
 521	[RTM_FAM(RTM_NEWQDISC)]     = NLMSG_LENGTH(sizeof(struct tcmsg)),
 522	[RTM_FAM(RTM_NEWTCLASS)]    = NLMSG_LENGTH(sizeof(struct tcmsg)),
 523	[RTM_FAM(RTM_NEWTFILTER)]   = NLMSG_LENGTH(sizeof(struct tcmsg)),
 524	[RTM_FAM(RTM_NEWACTION)]    = NLMSG_LENGTH(sizeof(struct tcamsg)),
 525	[RTM_FAM(RTM_GETMULTICAST)] = NLMSG_LENGTH(sizeof(struct rtgenmsg)),
 526	[RTM_FAM(RTM_GETANYCAST)]   = NLMSG_LENGTH(sizeof(struct rtgenmsg)),
 527};
 528
 529static const int rta_max[RTM_NR_FAMILIES] =
 530{
 531	[RTM_FAM(RTM_NEWLINK)]      = IFLA_MAX,
 532	[RTM_FAM(RTM_NEWADDR)]      = IFA_MAX,
 533	[RTM_FAM(RTM_NEWROUTE)]     = RTA_MAX,
 534	[RTM_FAM(RTM_NEWRULE)]      = FRA_MAX,
 535	[RTM_FAM(RTM_NEWQDISC)]     = TCA_MAX,
 536	[RTM_FAM(RTM_NEWTCLASS)]    = TCA_MAX,
 537	[RTM_FAM(RTM_NEWTFILTER)]   = TCA_MAX,
 538	[RTM_FAM(RTM_NEWACTION)]    = TCAA_MAX,
 539};
 540
 541void __rta_fill(struct sk_buff *skb, int attrtype, int attrlen, const void *data)
 542{
 543	struct rtattr *rta;
 544	int size = RTA_LENGTH(attrlen);
 
 
 
 545
 546	rta = (struct rtattr *)skb_put(skb, RTA_ALIGN(size));
 547	rta->rta_type = attrtype;
 548	rta->rta_len = size;
 549	memcpy(RTA_DATA(rta), data, attrlen);
 550	memset(RTA_DATA(rta) + attrlen, 0, RTA_ALIGN(size) - size);
 
 
 551}
 552EXPORT_SYMBOL(__rta_fill);
 553
 554int rtnetlink_send(struct sk_buff *skb, struct net *net, u32 pid, unsigned group, int echo)
 555{
 556	struct sock *rtnl = net->rtnl;
 557	int err = 0;
 558
 559	NETLINK_CB(skb).dst_group = group;
 560	if (echo)
 561		atomic_inc(&skb->users);
 562	netlink_broadcast(rtnl, skb, pid, group, GFP_KERNEL);
 563	if (echo)
 564		err = netlink_unicast(rtnl, skb, pid, MSG_DONTWAIT);
 565	return err;
 566}
 567
 568int rtnl_unicast(struct sk_buff *skb, struct net *net, u32 pid)
 569{
 570	struct sock *rtnl = net->rtnl;
 571
 572	return nlmsg_unicast(rtnl, skb, pid);
 573}
 574EXPORT_SYMBOL(rtnl_unicast);
 575
 576void rtnl_notify(struct sk_buff *skb, struct net *net, u32 pid, u32 group,
 577		 struct nlmsghdr *nlh, gfp_t flags)
 578{
 579	struct sock *rtnl = net->rtnl;
 580	int report = 0;
 581
 582	if (nlh)
 583		report = nlmsg_report(nlh);
 584
 585	nlmsg_notify(rtnl, skb, pid, group, report, flags);
 586}
 587EXPORT_SYMBOL(rtnl_notify);
 588
 589void rtnl_set_sk_err(struct net *net, u32 group, int error)
 590{
 591	struct sock *rtnl = net->rtnl;
 592
 593	netlink_set_err(rtnl, 0, group, error);
 594}
 595EXPORT_SYMBOL(rtnl_set_sk_err);
 596
 597int rtnetlink_put_metrics(struct sk_buff *skb, u32 *metrics)
 598{
 599	struct nlattr *mx;
 600	int i, valid = 0;
 601
 602	mx = nla_nest_start(skb, RTA_METRICS);
 603	if (mx == NULL)
 604		return -ENOBUFS;
 605
 606	for (i = 0; i < RTAX_MAX; i++) {
 607		if (metrics[i]) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 608			valid++;
 609			NLA_PUT_U32(skb, i+1, metrics[i]);
 610		}
 611	}
 612
 613	if (!valid) {
 614		nla_nest_cancel(skb, mx);
 615		return 0;
 616	}
 617
 618	return nla_nest_end(skb, mx);
 619
 620nla_put_failure:
 621	nla_nest_cancel(skb, mx);
 622	return -EMSGSIZE;
 623}
 624EXPORT_SYMBOL(rtnetlink_put_metrics);
 625
 626int rtnl_put_cacheinfo(struct sk_buff *skb, struct dst_entry *dst, u32 id,
 627		       u32 ts, u32 tsage, long expires, u32 error)
 628{
 629	struct rta_cacheinfo ci = {
 630		.rta_lastuse = jiffies_to_clock_t(jiffies - dst->lastuse),
 631		.rta_used = dst->__use,
 632		.rta_clntref = atomic_read(&(dst->__refcnt)),
 633		.rta_error = error,
 634		.rta_id =  id,
 635		.rta_ts = ts,
 636		.rta_tsage = tsage,
 637	};
 638
 639	if (expires)
 640		ci.rta_expires = jiffies_to_clock_t(expires);
 641
 
 
 
 
 642	return nla_put(skb, RTA_CACHEINFO, sizeof(ci), &ci);
 643}
 644EXPORT_SYMBOL_GPL(rtnl_put_cacheinfo);
 645
 646static void set_operstate(struct net_device *dev, unsigned char transition)
 647{
 648	unsigned char operstate = dev->operstate;
 649
 650	switch (transition) {
 651	case IF_OPER_UP:
 652		if ((operstate == IF_OPER_DORMANT ||
 653		     operstate == IF_OPER_UNKNOWN) &&
 654		    !netif_dormant(dev))
 655			operstate = IF_OPER_UP;
 656		break;
 657
 658	case IF_OPER_DORMANT:
 659		if (operstate == IF_OPER_UP ||
 660		    operstate == IF_OPER_UNKNOWN)
 661			operstate = IF_OPER_DORMANT;
 662		break;
 663	}
 664
 665	if (dev->operstate != operstate) {
 666		write_lock_bh(&dev_base_lock);
 667		dev->operstate = operstate;
 668		write_unlock_bh(&dev_base_lock);
 669		netdev_state_change(dev);
 670	}
 671}
 672
 
 
 
 
 
 
 673static unsigned int rtnl_dev_combine_flags(const struct net_device *dev,
 674					   const struct ifinfomsg *ifm)
 675{
 676	unsigned int flags = ifm->ifi_flags;
 677
 678	/* bugwards compatibility: ifi_change == 0 is treated as ~0 */
 679	if (ifm->ifi_change)
 680		flags = (flags & ifm->ifi_change) |
 681			(dev->flags & ~ifm->ifi_change);
 682
 683	return flags;
 684}
 685
 686static void copy_rtnl_link_stats(struct rtnl_link_stats *a,
 687				 const struct rtnl_link_stats64 *b)
 688{
 689	a->rx_packets = b->rx_packets;
 690	a->tx_packets = b->tx_packets;
 691	a->rx_bytes = b->rx_bytes;
 692	a->tx_bytes = b->tx_bytes;
 693	a->rx_errors = b->rx_errors;
 694	a->tx_errors = b->tx_errors;
 695	a->rx_dropped = b->rx_dropped;
 696	a->tx_dropped = b->tx_dropped;
 697
 698	a->multicast = b->multicast;
 699	a->collisions = b->collisions;
 700
 701	a->rx_length_errors = b->rx_length_errors;
 702	a->rx_over_errors = b->rx_over_errors;
 703	a->rx_crc_errors = b->rx_crc_errors;
 704	a->rx_frame_errors = b->rx_frame_errors;
 705	a->rx_fifo_errors = b->rx_fifo_errors;
 706	a->rx_missed_errors = b->rx_missed_errors;
 707
 708	a->tx_aborted_errors = b->tx_aborted_errors;
 709	a->tx_carrier_errors = b->tx_carrier_errors;
 710	a->tx_fifo_errors = b->tx_fifo_errors;
 711	a->tx_heartbeat_errors = b->tx_heartbeat_errors;
 712	a->tx_window_errors = b->tx_window_errors;
 713
 714	a->rx_compressed = b->rx_compressed;
 715	a->tx_compressed = b->tx_compressed;
 716}
 717
 718static void copy_rtnl_link_stats64(void *v, const struct rtnl_link_stats64 *b)
 719{
 720	memcpy(v, b, sizeof(*b));
 721}
 722
 723/* All VF info */
 724static inline int rtnl_vfinfo_size(const struct net_device *dev)
 
 725{
 726	if (dev->dev.parent && dev_is_pci(dev->dev.parent)) {
 727
 728		int num_vfs = dev_num_vf(dev->dev.parent);
 729		size_t size = nla_total_size(sizeof(struct nlattr));
 730		size += nla_total_size(num_vfs * sizeof(struct nlattr));
 731		size += num_vfs *
 732			(nla_total_size(sizeof(struct ifla_vf_mac)) +
 
 733			 nla_total_size(sizeof(struct ifla_vf_vlan)) +
 734			 nla_total_size(sizeof(struct ifla_vf_tx_rate)));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 735		return size;
 736	} else
 737		return 0;
 738}
 739
 740static size_t rtnl_port_size(const struct net_device *dev)
 
 741{
 742	size_t port_size = nla_total_size(4)		/* PORT_VF */
 743		+ nla_total_size(PORT_PROFILE_MAX)	/* PORT_PROFILE */
 744		+ nla_total_size(sizeof(struct ifla_port_vsi))
 745							/* PORT_VSI_TYPE */
 746		+ nla_total_size(PORT_UUID_MAX)		/* PORT_INSTANCE_UUID */
 747		+ nla_total_size(PORT_UUID_MAX)		/* PORT_HOST_UUID */
 748		+ nla_total_size(1)			/* PROT_VDP_REQUEST */
 749		+ nla_total_size(2);			/* PORT_VDP_RESPONSE */
 750	size_t vf_ports_size = nla_total_size(sizeof(struct nlattr));
 751	size_t vf_port_size = nla_total_size(sizeof(struct nlattr))
 752		+ port_size;
 753	size_t port_self_size = nla_total_size(sizeof(struct nlattr))
 754		+ port_size;
 755
 756	if (!dev->netdev_ops->ndo_get_vf_port || !dev->dev.parent)
 
 757		return 0;
 758	if (dev_num_vf(dev->dev.parent))
 759		return port_self_size + vf_ports_size +
 760			vf_port_size * dev_num_vf(dev->dev.parent);
 761	else
 762		return port_self_size;
 763}
 764
 765static noinline size_t if_nlmsg_size(const struct net_device *dev)
 
 
 
 
 
 
 
 
 
 
 
 
 766{
 767	return NLMSG_ALIGN(sizeof(struct ifinfomsg))
 768	       + nla_total_size(IFNAMSIZ) /* IFLA_IFNAME */
 769	       + nla_total_size(IFALIASZ) /* IFLA_IFALIAS */
 770	       + nla_total_size(IFNAMSIZ) /* IFLA_QDISC */
 771	       + nla_total_size(sizeof(struct rtnl_link_ifmap))
 772	       + nla_total_size(sizeof(struct rtnl_link_stats))
 773	       + nla_total_size(sizeof(struct rtnl_link_stats64))
 774	       + nla_total_size(MAX_ADDR_LEN) /* IFLA_ADDRESS */
 775	       + nla_total_size(MAX_ADDR_LEN) /* IFLA_BROADCAST */
 776	       + nla_total_size(4) /* IFLA_TXQLEN */
 777	       + nla_total_size(4) /* IFLA_WEIGHT */
 778	       + nla_total_size(4) /* IFLA_MTU */
 779	       + nla_total_size(4) /* IFLA_LINK */
 780	       + nla_total_size(4) /* IFLA_MASTER */
 
 
 
 
 
 
 781	       + nla_total_size(1) /* IFLA_OPERSTATE */
 782	       + nla_total_size(1) /* IFLA_LINKMODE */
 783	       + nla_total_size(4) /* IFLA_NUM_VF */
 784	       + rtnl_vfinfo_size(dev) /* IFLA_VFINFO_LIST */
 785	       + rtnl_port_size(dev) /* IFLA_VF_PORTS + IFLA_PORT_SELF */
 
 
 
 786	       + rtnl_link_get_size(dev) /* IFLA_LINKINFO */
 787	       + rtnl_link_get_af_size(dev); /* IFLA_AF_SPEC */
 
 
 
 
 
 
 788}
 789
 790static int rtnl_vf_ports_fill(struct sk_buff *skb, struct net_device *dev)
 791{
 792	struct nlattr *vf_ports;
 793	struct nlattr *vf_port;
 794	int vf;
 795	int err;
 796
 797	vf_ports = nla_nest_start(skb, IFLA_VF_PORTS);
 798	if (!vf_ports)
 799		return -EMSGSIZE;
 800
 801	for (vf = 0; vf < dev_num_vf(dev->dev.parent); vf++) {
 802		vf_port = nla_nest_start(skb, IFLA_VF_PORT);
 803		if (!vf_port)
 804			goto nla_put_failure;
 805		NLA_PUT_U32(skb, IFLA_PORT_VF, vf);
 
 806		err = dev->netdev_ops->ndo_get_vf_port(dev, vf, skb);
 807		if (err == -EMSGSIZE)
 808			goto nla_put_failure;
 809		if (err) {
 810			nla_nest_cancel(skb, vf_port);
 811			continue;
 812		}
 813		nla_nest_end(skb, vf_port);
 814	}
 815
 816	nla_nest_end(skb, vf_ports);
 817
 818	return 0;
 819
 820nla_put_failure:
 821	nla_nest_cancel(skb, vf_ports);
 822	return -EMSGSIZE;
 823}
 824
 825static int rtnl_port_self_fill(struct sk_buff *skb, struct net_device *dev)
 826{
 827	struct nlattr *port_self;
 828	int err;
 829
 830	port_self = nla_nest_start(skb, IFLA_PORT_SELF);
 831	if (!port_self)
 832		return -EMSGSIZE;
 833
 834	err = dev->netdev_ops->ndo_get_vf_port(dev, PORT_SELF_VF, skb);
 835	if (err) {
 836		nla_nest_cancel(skb, port_self);
 837		return (err == -EMSGSIZE) ? err : 0;
 838	}
 839
 840	nla_nest_end(skb, port_self);
 841
 842	return 0;
 843}
 844
 845static int rtnl_port_fill(struct sk_buff *skb, struct net_device *dev)
 
 846{
 847	int err;
 848
 849	if (!dev->netdev_ops->ndo_get_vf_port || !dev->dev.parent)
 
 850		return 0;
 851
 852	err = rtnl_port_self_fill(skb, dev);
 853	if (err)
 854		return err;
 855
 856	if (dev_num_vf(dev->dev.parent)) {
 857		err = rtnl_vf_ports_fill(skb, dev);
 858		if (err)
 859			return err;
 860	}
 861
 862	return 0;
 863}
 864
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 865static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
 866			    int type, u32 pid, u32 seq, u32 change,
 867			    unsigned int flags)
 868{
 869	struct ifinfomsg *ifm;
 870	struct nlmsghdr *nlh;
 871	struct rtnl_link_stats64 temp;
 872	const struct rtnl_link_stats64 *stats;
 873	struct nlattr *attr, *af_spec;
 874	struct rtnl_af_ops *af_ops;
 
 875
 876	ASSERT_RTNL();
 877	nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ifm), flags);
 878	if (nlh == NULL)
 879		return -EMSGSIZE;
 880
 881	ifm = nlmsg_data(nlh);
 882	ifm->ifi_family = AF_UNSPEC;
 883	ifm->__ifi_pad = 0;
 884	ifm->ifi_type = dev->type;
 885	ifm->ifi_index = dev->ifindex;
 886	ifm->ifi_flags = dev_get_flags(dev);
 887	ifm->ifi_change = change;
 888
 889	NLA_PUT_STRING(skb, IFLA_IFNAME, dev->name);
 890	NLA_PUT_U32(skb, IFLA_TXQLEN, dev->tx_queue_len);
 891	NLA_PUT_U8(skb, IFLA_OPERSTATE,
 892		   netif_running(dev) ? dev->operstate : IF_OPER_DOWN);
 893	NLA_PUT_U8(skb, IFLA_LINKMODE, dev->link_mode);
 894	NLA_PUT_U32(skb, IFLA_MTU, dev->mtu);
 895	NLA_PUT_U32(skb, IFLA_GROUP, dev->group);
 896
 897	if (dev->ifindex != dev->iflink)
 898		NLA_PUT_U32(skb, IFLA_LINK, dev->iflink);
 899
 900	if (dev->master)
 901		NLA_PUT_U32(skb, IFLA_MASTER, dev->master->ifindex);
 902
 903	if (dev->qdisc)
 904		NLA_PUT_STRING(skb, IFLA_QDISC, dev->qdisc->ops->id);
 905
 906	if (dev->ifalias)
 907		NLA_PUT_STRING(skb, IFLA_IFALIAS, dev->ifalias);
 
 
 
 
 
 
 
 
 908
 909	if (1) {
 910		struct rtnl_link_ifmap map = {
 911			.mem_start   = dev->mem_start,
 912			.mem_end     = dev->mem_end,
 913			.base_addr   = dev->base_addr,
 914			.irq         = dev->irq,
 915			.dma         = dev->dma,
 916			.port        = dev->if_port,
 917		};
 918		NLA_PUT(skb, IFLA_MAP, sizeof(map), &map);
 919	}
 920
 921	if (dev->addr_len) {
 922		NLA_PUT(skb, IFLA_ADDRESS, dev->addr_len, dev->dev_addr);
 923		NLA_PUT(skb, IFLA_BROADCAST, dev->addr_len, dev->broadcast);
 
 924	}
 925
 926	attr = nla_reserve(skb, IFLA_STATS,
 927			sizeof(struct rtnl_link_stats));
 928	if (attr == NULL)
 929		goto nla_put_failure;
 930
 931	stats = dev_get_stats(dev, &temp);
 932	copy_rtnl_link_stats(nla_data(attr), stats);
 933
 934	attr = nla_reserve(skb, IFLA_STATS64,
 935			sizeof(struct rtnl_link_stats64));
 936	if (attr == NULL)
 937		goto nla_put_failure;
 938	copy_rtnl_link_stats64(nla_data(attr), stats);
 939
 940	if (dev->dev.parent)
 941		NLA_PUT_U32(skb, IFLA_NUM_VF, dev_num_vf(dev->dev.parent));
 942
 943	if (dev->netdev_ops->ndo_get_vf_config && dev->dev.parent) {
 944		int i;
 
 945
 946		struct nlattr *vfinfo, *vf;
 
 
 
 947		int num_vfs = dev_num_vf(dev->dev.parent);
 948
 949		vfinfo = nla_nest_start(skb, IFLA_VFINFO_LIST);
 950		if (!vfinfo)
 951			goto nla_put_failure;
 952		for (i = 0; i < num_vfs; i++) {
 953			struct ifla_vf_info ivi;
 954			struct ifla_vf_mac vf_mac;
 955			struct ifla_vf_vlan vf_vlan;
 956			struct ifla_vf_tx_rate vf_tx_rate;
 957			if (dev->netdev_ops->ndo_get_vf_config(dev, i, &ivi))
 958				break;
 959			vf_mac.vf = vf_vlan.vf = vf_tx_rate.vf = ivi.vf;
 960			memcpy(vf_mac.mac, ivi.mac, sizeof(ivi.mac));
 961			vf_vlan.vlan = ivi.vlan;
 962			vf_vlan.qos = ivi.qos;
 963			vf_tx_rate.rate = ivi.tx_rate;
 964			vf = nla_nest_start(skb, IFLA_VF_INFO);
 965			if (!vf) {
 966				nla_nest_cancel(skb, vfinfo);
 967				goto nla_put_failure;
 968			}
 969			NLA_PUT(skb, IFLA_VF_MAC, sizeof(vf_mac), &vf_mac);
 970			NLA_PUT(skb, IFLA_VF_VLAN, sizeof(vf_vlan), &vf_vlan);
 971			NLA_PUT(skb, IFLA_VF_TX_RATE, sizeof(vf_tx_rate), &vf_tx_rate);
 972			nla_nest_end(skb, vf);
 973		}
 
 974		nla_nest_end(skb, vfinfo);
 975	}
 976
 977	if (rtnl_port_fill(skb, dev))
 
 
 
 978		goto nla_put_failure;
 979
 980	if (dev->rtnl_link_ops) {
 981		if (rtnl_link_fill(skb, dev) < 0)
 982			goto nla_put_failure;
 983	}
 984
 
 
 
 
 
 
 
 
 
 
 
 
 985	if (!(af_spec = nla_nest_start(skb, IFLA_AF_SPEC)))
 986		goto nla_put_failure;
 987
 988	list_for_each_entry(af_ops, &rtnl_af_ops, list) {
 989		if (af_ops->fill_link_af) {
 990			struct nlattr *af;
 991			int err;
 992
 993			if (!(af = nla_nest_start(skb, af_ops->family)))
 994				goto nla_put_failure;
 995
 996			err = af_ops->fill_link_af(skb, dev);
 997
 998			/*
 999			 * Caller may return ENODATA to indicate that there
1000			 * was no data to be dumped. This is not an error, it
1001			 * means we should trim the attribute header and
1002			 * continue.
1003			 */
1004			if (err == -ENODATA)
1005				nla_nest_cancel(skb, af);
1006			else if (err < 0)
1007				goto nla_put_failure;
1008
1009			nla_nest_end(skb, af);
1010		}
1011	}
1012
1013	nla_nest_end(skb, af_spec);
1014
1015	return nlmsg_end(skb, nlh);
 
1016
1017nla_put_failure:
1018	nlmsg_cancel(skb, nlh);
1019	return -EMSGSIZE;
1020}
1021
1022static int rtnl_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb)
1023{
1024	struct net *net = sock_net(skb->sk);
1025	int h, s_h;
1026	int idx = 0, s_idx;
1027	struct net_device *dev;
1028	struct hlist_head *head;
1029	struct hlist_node *node;
1030
1031	s_h = cb->args[0];
1032	s_idx = cb->args[1];
1033
1034	rcu_read_lock();
1035	cb->seq = net->dev_base_seq;
1036
1037	for (h = s_h; h < NETDEV_HASHENTRIES; h++, s_idx = 0) {
1038		idx = 0;
1039		head = &net->dev_index_head[h];
1040		hlist_for_each_entry_rcu(dev, node, head, index_hlist) {
1041			if (idx < s_idx)
1042				goto cont;
1043			if (rtnl_fill_ifinfo(skb, dev, RTM_NEWLINK,
1044					     NETLINK_CB(cb->skb).pid,
1045					     cb->nlh->nlmsg_seq, 0,
1046					     NLM_F_MULTI) <= 0)
1047				goto out;
1048
1049			nl_dump_check_consistent(cb, nlmsg_hdr(skb));
1050cont:
1051			idx++;
1052		}
1053	}
1054out:
1055	rcu_read_unlock();
1056	cb->args[1] = idx;
1057	cb->args[0] = h;
1058
1059	return skb->len;
1060}
1061
1062const struct nla_policy ifla_policy[IFLA_MAX+1] = {
1063	[IFLA_IFNAME]		= { .type = NLA_STRING, .len = IFNAMSIZ-1 },
1064	[IFLA_ADDRESS]		= { .type = NLA_BINARY, .len = MAX_ADDR_LEN },
1065	[IFLA_BROADCAST]	= { .type = NLA_BINARY, .len = MAX_ADDR_LEN },
1066	[IFLA_MAP]		= { .len = sizeof(struct rtnl_link_ifmap) },
1067	[IFLA_MTU]		= { .type = NLA_U32 },
1068	[IFLA_LINK]		= { .type = NLA_U32 },
1069	[IFLA_MASTER]		= { .type = NLA_U32 },
 
1070	[IFLA_TXQLEN]		= { .type = NLA_U32 },
1071	[IFLA_WEIGHT]		= { .type = NLA_U32 },
1072	[IFLA_OPERSTATE]	= { .type = NLA_U8 },
1073	[IFLA_LINKMODE]		= { .type = NLA_U8 },
1074	[IFLA_LINKINFO]		= { .type = NLA_NESTED },
1075	[IFLA_NET_NS_PID]	= { .type = NLA_U32 },
1076	[IFLA_NET_NS_FD]	= { .type = NLA_U32 },
1077	[IFLA_IFALIAS]	        = { .type = NLA_STRING, .len = IFALIASZ-1 },
1078	[IFLA_VFINFO_LIST]	= {. type = NLA_NESTED },
1079	[IFLA_VF_PORTS]		= { .type = NLA_NESTED },
1080	[IFLA_PORT_SELF]	= { .type = NLA_NESTED },
1081	[IFLA_AF_SPEC]		= { .type = NLA_NESTED },
 
 
 
 
 
 
 
 
 
 
1082};
1083EXPORT_SYMBOL(ifla_policy);
1084
1085static const struct nla_policy ifla_info_policy[IFLA_INFO_MAX+1] = {
1086	[IFLA_INFO_KIND]	= { .type = NLA_STRING },
1087	[IFLA_INFO_DATA]	= { .type = NLA_NESTED },
1088};
1089
1090static const struct nla_policy ifla_vfinfo_policy[IFLA_VF_INFO_MAX+1] = {
1091	[IFLA_VF_INFO]		= { .type = NLA_NESTED },
1092};
1093
1094static const struct nla_policy ifla_vf_policy[IFLA_VF_MAX+1] = {
1095	[IFLA_VF_MAC]		= { .type = NLA_BINARY,
1096				    .len = sizeof(struct ifla_vf_mac) },
1097	[IFLA_VF_VLAN]		= { .type = NLA_BINARY,
1098				    .len = sizeof(struct ifla_vf_vlan) },
1099	[IFLA_VF_TX_RATE]	= { .type = NLA_BINARY,
1100				    .len = sizeof(struct ifla_vf_tx_rate) },
 
 
 
 
 
 
1101};
1102
1103static const struct nla_policy ifla_port_policy[IFLA_PORT_MAX+1] = {
1104	[IFLA_PORT_VF]		= { .type = NLA_U32 },
1105	[IFLA_PORT_PROFILE]	= { .type = NLA_STRING,
1106				    .len = PORT_PROFILE_MAX },
1107	[IFLA_PORT_VSI_TYPE]	= { .type = NLA_BINARY,
1108				    .len = sizeof(struct ifla_port_vsi)},
1109	[IFLA_PORT_INSTANCE_UUID] = { .type = NLA_BINARY,
1110				      .len = PORT_UUID_MAX },
1111	[IFLA_PORT_HOST_UUID]	= { .type = NLA_STRING,
1112				    .len = PORT_UUID_MAX },
1113	[IFLA_PORT_REQUEST]	= { .type = NLA_U8, },
1114	[IFLA_PORT_RESPONSE]	= { .type = NLA_U16, },
1115};
1116
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1117struct net *rtnl_link_get_net(struct net *src_net, struct nlattr *tb[])
1118{
1119	struct net *net;
1120	/* Examine the link attributes and figure out which
1121	 * network namespace we are talking about.
1122	 */
1123	if (tb[IFLA_NET_NS_PID])
1124		net = get_net_ns_by_pid(nla_get_u32(tb[IFLA_NET_NS_PID]));
1125	else if (tb[IFLA_NET_NS_FD])
1126		net = get_net_ns_by_fd(nla_get_u32(tb[IFLA_NET_NS_FD]));
1127	else
1128		net = get_net(src_net);
1129	return net;
1130}
1131EXPORT_SYMBOL(rtnl_link_get_net);
1132
1133static int validate_linkmsg(struct net_device *dev, struct nlattr *tb[])
1134{
1135	if (dev) {
1136		if (tb[IFLA_ADDRESS] &&
1137		    nla_len(tb[IFLA_ADDRESS]) < dev->addr_len)
1138			return -EINVAL;
1139
1140		if (tb[IFLA_BROADCAST] &&
1141		    nla_len(tb[IFLA_BROADCAST]) < dev->addr_len)
1142			return -EINVAL;
1143	}
1144
1145	if (tb[IFLA_AF_SPEC]) {
1146		struct nlattr *af;
1147		int rem, err;
1148
1149		nla_for_each_nested(af, tb[IFLA_AF_SPEC], rem) {
1150			const struct rtnl_af_ops *af_ops;
1151
1152			if (!(af_ops = rtnl_af_lookup(nla_type(af))))
1153				return -EAFNOSUPPORT;
1154
1155			if (!af_ops->set_link_af)
1156				return -EOPNOTSUPP;
1157
1158			if (af_ops->validate_link_af) {
1159				err = af_ops->validate_link_af(dev, af);
1160				if (err < 0)
1161					return err;
1162			}
1163		}
1164	}
1165
1166	return 0;
1167}
1168
1169static int do_setvfinfo(struct net_device *dev, struct nlattr *attr)
 
1170{
1171	int rem, err = -EINVAL;
1172	struct nlattr *vf;
1173	const struct net_device_ops *ops = dev->netdev_ops;
1174
1175	nla_for_each_nested(vf, attr, rem) {
1176		switch (nla_type(vf)) {
1177		case IFLA_VF_MAC: {
1178			struct ifla_vf_mac *ivm;
1179			ivm = nla_data(vf);
1180			err = -EOPNOTSUPP;
1181			if (ops->ndo_set_vf_mac)
1182				err = ops->ndo_set_vf_mac(dev, ivm->vf,
1183							  ivm->mac);
1184			break;
1185		}
1186		case IFLA_VF_VLAN: {
1187			struct ifla_vf_vlan *ivv;
1188			ivv = nla_data(vf);
1189			err = -EOPNOTSUPP;
1190			if (ops->ndo_set_vf_vlan)
1191				err = ops->ndo_set_vf_vlan(dev, ivv->vf,
1192							   ivv->vlan,
1193							   ivv->qos);
1194			break;
1195		}
1196		case IFLA_VF_TX_RATE: {
1197			struct ifla_vf_tx_rate *ivt;
1198			ivt = nla_data(vf);
1199			err = -EOPNOTSUPP;
1200			if (ops->ndo_set_vf_tx_rate)
1201				err = ops->ndo_set_vf_tx_rate(dev, ivt->vf,
1202							      ivt->rate);
1203			break;
1204		}
1205		default:
1206			err = -EINVAL;
1207			break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1208		}
1209		if (err)
1210			break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1211	}
 
1212	return err;
1213}
1214
1215static int do_set_master(struct net_device *dev, int ifindex)
1216{
1217	struct net_device *master_dev;
1218	const struct net_device_ops *ops;
1219	int err;
1220
1221	if (dev->master) {
1222		if (dev->master->ifindex == ifindex)
1223			return 0;
1224		ops = dev->master->netdev_ops;
1225		if (ops->ndo_del_slave) {
1226			err = ops->ndo_del_slave(dev->master, dev);
1227			if (err)
1228				return err;
1229		} else {
1230			return -EOPNOTSUPP;
1231		}
1232	}
1233
1234	if (ifindex) {
1235		master_dev = __dev_get_by_index(dev_net(dev), ifindex);
1236		if (!master_dev)
1237			return -EINVAL;
1238		ops = master_dev->netdev_ops;
1239		if (ops->ndo_add_slave) {
1240			err = ops->ndo_add_slave(master_dev, dev);
1241			if (err)
1242				return err;
1243		} else {
1244			return -EOPNOTSUPP;
1245		}
1246	}
1247	return 0;
1248}
1249
1250static int do_setlink(struct net_device *dev, struct ifinfomsg *ifm,
1251		      struct nlattr **tb, char *ifname, int modified)
 
 
 
 
1252{
1253	const struct net_device_ops *ops = dev->netdev_ops;
1254	int send_addr_notify = 0;
1255	int err;
1256
1257	if (tb[IFLA_NET_NS_PID] || tb[IFLA_NET_NS_FD]) {
1258		struct net *net = rtnl_link_get_net(dev_net(dev), tb);
1259		if (IS_ERR(net)) {
1260			err = PTR_ERR(net);
1261			goto errout;
1262		}
 
 
 
 
 
1263		err = dev_change_net_namespace(dev, net, ifname);
1264		put_net(net);
1265		if (err)
1266			goto errout;
1267		modified = 1;
1268	}
1269
1270	if (tb[IFLA_MAP]) {
1271		struct rtnl_link_ifmap *u_map;
1272		struct ifmap k_map;
1273
1274		if (!ops->ndo_set_config) {
1275			err = -EOPNOTSUPP;
1276			goto errout;
1277		}
1278
1279		if (!netif_device_present(dev)) {
1280			err = -ENODEV;
1281			goto errout;
1282		}
1283
1284		u_map = nla_data(tb[IFLA_MAP]);
1285		k_map.mem_start = (unsigned long) u_map->mem_start;
1286		k_map.mem_end = (unsigned long) u_map->mem_end;
1287		k_map.base_addr = (unsigned short) u_map->base_addr;
1288		k_map.irq = (unsigned char) u_map->irq;
1289		k_map.dma = (unsigned char) u_map->dma;
1290		k_map.port = (unsigned char) u_map->port;
1291
1292		err = ops->ndo_set_config(dev, &k_map);
1293		if (err < 0)
1294			goto errout;
1295
1296		modified = 1;
1297	}
1298
1299	if (tb[IFLA_ADDRESS]) {
1300		struct sockaddr *sa;
1301		int len;
1302
1303		if (!ops->ndo_set_mac_address) {
1304			err = -EOPNOTSUPP;
1305			goto errout;
1306		}
1307
1308		if (!netif_device_present(dev)) {
1309			err = -ENODEV;
1310			goto errout;
1311		}
1312
1313		len = sizeof(sa_family_t) + dev->addr_len;
1314		sa = kmalloc(len, GFP_KERNEL);
1315		if (!sa) {
1316			err = -ENOMEM;
1317			goto errout;
1318		}
1319		sa->sa_family = dev->type;
1320		memcpy(sa->sa_data, nla_data(tb[IFLA_ADDRESS]),
1321		       dev->addr_len);
1322		err = ops->ndo_set_mac_address(dev, sa);
1323		kfree(sa);
1324		if (err)
1325			goto errout;
1326		send_addr_notify = 1;
1327		modified = 1;
1328	}
1329
1330	if (tb[IFLA_MTU]) {
1331		err = dev_set_mtu(dev, nla_get_u32(tb[IFLA_MTU]));
1332		if (err < 0)
1333			goto errout;
1334		modified = 1;
1335	}
1336
1337	if (tb[IFLA_GROUP]) {
1338		dev_set_group(dev, nla_get_u32(tb[IFLA_GROUP]));
1339		modified = 1;
1340	}
1341
1342	/*
1343	 * Interface selected by interface index but interface
1344	 * name provided implies that a name change has been
1345	 * requested.
1346	 */
1347	if (ifm->ifi_index > 0 && ifname[0]) {
1348		err = dev_change_name(dev, ifname);
1349		if (err < 0)
1350			goto errout;
1351		modified = 1;
1352	}
1353
1354	if (tb[IFLA_IFALIAS]) {
1355		err = dev_set_alias(dev, nla_data(tb[IFLA_IFALIAS]),
1356				    nla_len(tb[IFLA_IFALIAS]));
1357		if (err < 0)
1358			goto errout;
1359		modified = 1;
1360	}
1361
1362	if (tb[IFLA_BROADCAST]) {
1363		nla_memcpy(dev->broadcast, tb[IFLA_BROADCAST], dev->addr_len);
1364		send_addr_notify = 1;
1365	}
1366
1367	if (ifm->ifi_flags || ifm->ifi_change) {
1368		err = dev_change_flags(dev, rtnl_dev_combine_flags(dev, ifm));
1369		if (err < 0)
1370			goto errout;
1371	}
1372
1373	if (tb[IFLA_MASTER]) {
1374		err = do_set_master(dev, nla_get_u32(tb[IFLA_MASTER]));
1375		if (err)
1376			goto errout;
1377		modified = 1;
1378	}
1379
1380	if (tb[IFLA_TXQLEN])
1381		dev->tx_queue_len = nla_get_u32(tb[IFLA_TXQLEN]);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1382
1383	if (tb[IFLA_OPERSTATE])
1384		set_operstate(dev, nla_get_u8(tb[IFLA_OPERSTATE]));
1385
1386	if (tb[IFLA_LINKMODE]) {
 
 
1387		write_lock_bh(&dev_base_lock);
1388		dev->link_mode = nla_get_u8(tb[IFLA_LINKMODE]);
 
 
1389		write_unlock_bh(&dev_base_lock);
1390	}
1391
1392	if (tb[IFLA_VFINFO_LIST]) {
 
1393		struct nlattr *attr;
1394		int rem;
 
1395		nla_for_each_nested(attr, tb[IFLA_VFINFO_LIST], rem) {
1396			if (nla_type(attr) != IFLA_VF_INFO) {
 
1397				err = -EINVAL;
1398				goto errout;
1399			}
1400			err = do_setvfinfo(dev, attr);
 
 
 
 
1401			if (err < 0)
1402				goto errout;
1403			modified = 1;
1404		}
1405	}
1406	err = 0;
1407
1408	if (tb[IFLA_VF_PORTS]) {
1409		struct nlattr *port[IFLA_PORT_MAX+1];
1410		struct nlattr *attr;
1411		int vf;
1412		int rem;
1413
1414		err = -EOPNOTSUPP;
1415		if (!ops->ndo_set_vf_port)
1416			goto errout;
1417
1418		nla_for_each_nested(attr, tb[IFLA_VF_PORTS], rem) {
1419			if (nla_type(attr) != IFLA_VF_PORT)
1420				continue;
1421			err = nla_parse_nested(port, IFLA_PORT_MAX,
1422				attr, ifla_port_policy);
 
 
 
1423			if (err < 0)
1424				goto errout;
1425			if (!port[IFLA_PORT_VF]) {
1426				err = -EOPNOTSUPP;
1427				goto errout;
1428			}
1429			vf = nla_get_u32(port[IFLA_PORT_VF]);
1430			err = ops->ndo_set_vf_port(dev, vf, port);
1431			if (err < 0)
1432				goto errout;
1433			modified = 1;
1434		}
1435	}
1436	err = 0;
1437
1438	if (tb[IFLA_PORT_SELF]) {
1439		struct nlattr *port[IFLA_PORT_MAX+1];
1440
1441		err = nla_parse_nested(port, IFLA_PORT_MAX,
1442			tb[IFLA_PORT_SELF], ifla_port_policy);
1443		if (err < 0)
1444			goto errout;
1445
1446		err = -EOPNOTSUPP;
1447		if (ops->ndo_set_vf_port)
1448			err = ops->ndo_set_vf_port(dev, PORT_SELF_VF, port);
1449		if (err < 0)
1450			goto errout;
1451		modified = 1;
1452	}
1453
1454	if (tb[IFLA_AF_SPEC]) {
1455		struct nlattr *af;
1456		int rem;
1457
1458		nla_for_each_nested(af, tb[IFLA_AF_SPEC], rem) {
1459			const struct rtnl_af_ops *af_ops;
1460
1461			if (!(af_ops = rtnl_af_lookup(nla_type(af))))
1462				BUG();
1463
1464			err = af_ops->set_link_af(dev, af);
1465			if (err < 0)
1466				goto errout;
1467
1468			modified = 1;
1469		}
1470	}
1471	err = 0;
1472
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1473errout:
1474	if (err < 0 && modified && net_ratelimit())
1475		printk(KERN_WARNING "A link change request failed with "
1476		       "some changes committed already. Interface %s may "
1477		       "have been left with an inconsistent configuration, "
1478		       "please check.\n", dev->name);
 
 
 
1479
1480	if (send_addr_notify)
1481		call_netdevice_notifiers(NETDEV_CHANGEADDR, dev);
1482	return err;
1483}
1484
1485static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
1486{
1487	struct net *net = sock_net(skb->sk);
1488	struct ifinfomsg *ifm;
1489	struct net_device *dev;
1490	int err;
1491	struct nlattr *tb[IFLA_MAX+1];
1492	char ifname[IFNAMSIZ];
1493
1494	err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy);
1495	if (err < 0)
1496		goto errout;
1497
1498	if (tb[IFLA_IFNAME])
1499		nla_strlcpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
1500	else
1501		ifname[0] = '\0';
1502
1503	err = -EINVAL;
1504	ifm = nlmsg_data(nlh);
1505	if (ifm->ifi_index > 0)
1506		dev = __dev_get_by_index(net, ifm->ifi_index);
1507	else if (tb[IFLA_IFNAME])
1508		dev = __dev_get_by_name(net, ifname);
1509	else
1510		goto errout;
1511
1512	if (dev == NULL) {
1513		err = -ENODEV;
1514		goto errout;
1515	}
1516
1517	err = validate_linkmsg(dev, tb);
1518	if (err < 0)
1519		goto errout;
1520
1521	err = do_setlink(dev, ifm, tb, ifname, 0);
1522errout:
1523	return err;
1524}
1525
1526static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1527{
1528	struct net *net = sock_net(skb->sk);
1529	const struct rtnl_link_ops *ops;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1530	struct net_device *dev;
1531	struct ifinfomsg *ifm;
1532	char ifname[IFNAMSIZ];
1533	struct nlattr *tb[IFLA_MAX+1];
1534	int err;
1535	LIST_HEAD(list_kill);
1536
1537	err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy);
1538	if (err < 0)
1539		return err;
1540
1541	if (tb[IFLA_IFNAME])
1542		nla_strlcpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
1543
1544	ifm = nlmsg_data(nlh);
1545	if (ifm->ifi_index > 0)
1546		dev = __dev_get_by_index(net, ifm->ifi_index);
1547	else if (tb[IFLA_IFNAME])
1548		dev = __dev_get_by_name(net, ifname);
 
 
1549	else
1550		return -EINVAL;
1551
1552	if (!dev)
1553		return -ENODEV;
1554
1555	ops = dev->rtnl_link_ops;
1556	if (!ops)
1557		return -EOPNOTSUPP;
1558
1559	ops->dellink(dev, &list_kill);
1560	unregister_netdevice_many(&list_kill);
1561	list_del(&list_kill);
1562	return 0;
1563}
1564
1565int rtnl_configure_link(struct net_device *dev, const struct ifinfomsg *ifm)
1566{
1567	unsigned int old_flags;
1568	int err;
1569
1570	old_flags = dev->flags;
1571	if (ifm && (ifm->ifi_flags || ifm->ifi_change)) {
1572		err = __dev_change_flags(dev, rtnl_dev_combine_flags(dev, ifm));
1573		if (err < 0)
1574			return err;
1575	}
1576
1577	dev->rtnl_link_state = RTNL_LINK_INITIALIZED;
1578	rtmsg_ifinfo(RTM_NEWLINK, dev, ~0U);
1579
1580	__dev_notify_flags(dev, old_flags);
1581	return 0;
1582}
1583EXPORT_SYMBOL(rtnl_configure_link);
1584
1585struct net_device *rtnl_create_link(struct net *src_net, struct net *net,
1586	char *ifname, const struct rtnl_link_ops *ops, struct nlattr *tb[])
 
1587{
1588	int err;
1589	struct net_device *dev;
1590	unsigned int num_queues = 1;
1591	unsigned int real_num_queues = 1;
 
 
 
 
 
 
 
 
 
 
1592
1593	if (ops->get_tx_queues) {
1594		err = ops->get_tx_queues(src_net, tb, &num_queues,
1595					 &real_num_queues);
1596		if (err)
1597			goto err;
1598	}
1599	err = -ENOMEM;
1600	dev = alloc_netdev_mq(ops->priv_size, ifname, ops->setup, num_queues);
 
1601	if (!dev)
1602		goto err;
1603
1604	dev_net_set(dev, net);
1605	dev->rtnl_link_ops = ops;
1606	dev->rtnl_link_state = RTNL_LINK_INITIALIZING;
1607	dev->real_num_tx_queues = real_num_queues;
1608
1609	if (tb[IFLA_MTU])
1610		dev->mtu = nla_get_u32(tb[IFLA_MTU]);
1611	if (tb[IFLA_ADDRESS])
1612		memcpy(dev->dev_addr, nla_data(tb[IFLA_ADDRESS]),
1613				nla_len(tb[IFLA_ADDRESS]));
 
 
1614	if (tb[IFLA_BROADCAST])
1615		memcpy(dev->broadcast, nla_data(tb[IFLA_BROADCAST]),
1616				nla_len(tb[IFLA_BROADCAST]));
1617	if (tb[IFLA_TXQLEN])
1618		dev->tx_queue_len = nla_get_u32(tb[IFLA_TXQLEN]);
1619	if (tb[IFLA_OPERSTATE])
1620		set_operstate(dev, nla_get_u8(tb[IFLA_OPERSTATE]));
1621	if (tb[IFLA_LINKMODE])
1622		dev->link_mode = nla_get_u8(tb[IFLA_LINKMODE]);
1623	if (tb[IFLA_GROUP])
1624		dev_set_group(dev, nla_get_u32(tb[IFLA_GROUP]));
1625
1626	return dev;
1627
1628err:
1629	return ERR_PTR(err);
1630}
1631EXPORT_SYMBOL(rtnl_create_link);
1632
1633static int rtnl_group_changelink(struct net *net, int group,
 
1634		struct ifinfomsg *ifm,
1635		struct nlattr **tb)
1636{
1637	struct net_device *dev;
1638	int err;
1639
1640	for_each_netdev(net, dev) {
1641		if (dev->group == group) {
1642			err = do_setlink(dev, ifm, tb, NULL, 0);
1643			if (err < 0)
1644				return err;
1645		}
1646	}
1647
1648	return 0;
1649}
1650
1651static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
1652{
1653	struct net *net = sock_net(skb->sk);
1654	const struct rtnl_link_ops *ops;
 
1655	struct net_device *dev;
 
1656	struct ifinfomsg *ifm;
1657	char kind[MODULE_NAME_LEN];
1658	char ifname[IFNAMSIZ];
1659	struct nlattr *tb[IFLA_MAX+1];
1660	struct nlattr *linkinfo[IFLA_INFO_MAX+1];
 
1661	int err;
1662
1663#ifdef CONFIG_MODULES
1664replay:
1665#endif
1666	err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy);
1667	if (err < 0)
1668		return err;
1669
1670	if (tb[IFLA_IFNAME])
1671		nla_strlcpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
1672	else
1673		ifname[0] = '\0';
1674
1675	ifm = nlmsg_data(nlh);
1676	if (ifm->ifi_index > 0)
1677		dev = __dev_get_by_index(net, ifm->ifi_index);
1678	else {
1679		if (ifname[0])
1680			dev = __dev_get_by_name(net, ifname);
1681		else
1682			dev = NULL;
1683	}
1684
 
 
 
 
 
 
1685	err = validate_linkmsg(dev, tb);
1686	if (err < 0)
1687		return err;
1688
1689	if (tb[IFLA_LINKINFO]) {
1690		err = nla_parse_nested(linkinfo, IFLA_INFO_MAX,
1691				       tb[IFLA_LINKINFO], ifla_info_policy);
1692		if (err < 0)
1693			return err;
1694	} else
1695		memset(linkinfo, 0, sizeof(linkinfo));
1696
1697	if (linkinfo[IFLA_INFO_KIND]) {
1698		nla_strlcpy(kind, linkinfo[IFLA_INFO_KIND], sizeof(kind));
1699		ops = rtnl_link_ops_get(kind);
1700	} else {
1701		kind[0] = '\0';
1702		ops = NULL;
1703	}
1704
1705	if (1) {
1706		struct nlattr *attr[ops ? ops->maxtype + 1 : 0], **data = NULL;
1707		struct net *dest_net;
 
 
 
1708
1709		if (ops) {
1710			if (ops->maxtype && linkinfo[IFLA_INFO_DATA]) {
1711				err = nla_parse_nested(attr, ops->maxtype,
1712						       linkinfo[IFLA_INFO_DATA],
1713						       ops->policy);
1714				if (err < 0)
1715					return err;
1716				data = attr;
1717			}
1718			if (ops->validate) {
1719				err = ops->validate(tb, data);
1720				if (err < 0)
1721					return err;
1722			}
1723		}
1724
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1725		if (dev) {
1726			int modified = 0;
1727
1728			if (nlh->nlmsg_flags & NLM_F_EXCL)
1729				return -EEXIST;
1730			if (nlh->nlmsg_flags & NLM_F_REPLACE)
1731				return -EOPNOTSUPP;
1732
1733			if (linkinfo[IFLA_INFO_DATA]) {
1734				if (!ops || ops != dev->rtnl_link_ops ||
1735				    !ops->changelink)
1736					return -EOPNOTSUPP;
1737
1738				err = ops->changelink(dev, tb, data);
1739				if (err < 0)
1740					return err;
1741				modified = 1;
1742			}
1743
1744			return do_setlink(dev, ifm, tb, ifname, modified);
 
 
 
 
 
 
 
 
 
 
 
1745		}
1746
1747		if (!(nlh->nlmsg_flags & NLM_F_CREATE)) {
1748			if (ifm->ifi_index == 0 && tb[IFLA_GROUP])
1749				return rtnl_group_changelink(net,
1750						nla_get_u32(tb[IFLA_GROUP]),
1751						ifm, tb);
1752			return -ENODEV;
1753		}
1754
1755		if (ifm->ifi_index)
1756			return -EOPNOTSUPP;
1757		if (tb[IFLA_MAP] || tb[IFLA_MASTER] || tb[IFLA_PROTINFO])
1758			return -EOPNOTSUPP;
1759
1760		if (!ops) {
1761#ifdef CONFIG_MODULES
1762			if (kind[0]) {
1763				__rtnl_unlock();
1764				request_module("rtnl-link-%s", kind);
1765				rtnl_lock();
1766				ops = rtnl_link_ops_get(kind);
1767				if (ops)
1768					goto replay;
1769			}
1770#endif
1771			return -EOPNOTSUPP;
1772		}
1773
1774		if (!ifname[0])
 
 
 
1775			snprintf(ifname, IFNAMSIZ, "%s%%d", ops->kind);
 
 
1776
1777		dest_net = rtnl_link_get_net(net, tb);
1778		if (IS_ERR(dest_net))
1779			return PTR_ERR(dest_net);
1780
1781		dev = rtnl_create_link(net, dest_net, ifname, ops, tb);
 
 
1782
1783		if (IS_ERR(dev))
1784			err = PTR_ERR(dev);
1785		else if (ops->newlink)
1786			err = ops->newlink(net, dev, tb, data);
1787		else
1788			err = register_netdevice(dev);
1789
1790		if (err < 0 && !IS_ERR(dev))
1791			free_netdev(dev);
1792		if (err < 0)
 
 
 
 
 
 
 
 
 
 
 
1793			goto out;
 
 
 
1794
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1795		err = rtnl_configure_link(dev, ifm);
1796		if (err < 0)
1797			unregister_netdevice(dev);
 
 
 
 
 
1798out:
 
 
1799		put_net(dest_net);
1800		return err;
 
 
 
 
 
 
 
 
 
 
1801	}
1802}
1803
1804static int rtnl_getlink(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg)
1805{
1806	struct net *net = sock_net(skb->sk);
1807	struct ifinfomsg *ifm;
1808	char ifname[IFNAMSIZ];
1809	struct nlattr *tb[IFLA_MAX+1];
1810	struct net_device *dev = NULL;
1811	struct sk_buff *nskb;
1812	int err;
 
1813
1814	err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy);
1815	if (err < 0)
1816		return err;
1817
1818	if (tb[IFLA_IFNAME])
1819		nla_strlcpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
1820
 
 
 
1821	ifm = nlmsg_data(nlh);
1822	if (ifm->ifi_index > 0)
1823		dev = __dev_get_by_index(net, ifm->ifi_index);
1824	else if (tb[IFLA_IFNAME])
1825		dev = __dev_get_by_name(net, ifname);
1826	else
1827		return -EINVAL;
1828
1829	if (dev == NULL)
1830		return -ENODEV;
1831
1832	nskb = nlmsg_new(if_nlmsg_size(dev), GFP_KERNEL);
1833	if (nskb == NULL)
1834		return -ENOBUFS;
1835
1836	err = rtnl_fill_ifinfo(nskb, dev, RTM_NEWLINK, NETLINK_CB(skb).pid,
1837			       nlh->nlmsg_seq, 0, 0);
1838	if (err < 0) {
1839		/* -EMSGSIZE implies BUG in if_nlmsg_size */
1840		WARN_ON(err == -EMSGSIZE);
1841		kfree_skb(nskb);
1842	} else
1843		err = rtnl_unicast(nskb, net, NETLINK_CB(skb).pid);
1844
1845	return err;
1846}
1847
1848static u16 rtnl_calcit(struct sk_buff *skb)
1849{
1850	return min_ifinfo_dump_size;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1851}
1852
1853static int rtnl_dump_all(struct sk_buff *skb, struct netlink_callback *cb)
1854{
1855	int idx;
1856	int s_idx = cb->family;
1857
1858	if (s_idx == 0)
1859		s_idx = 1;
1860	for (idx = 1; idx <= RTNL_FAMILY_MAX; idx++) {
1861		int type = cb->nlh->nlmsg_type-RTM_BASE;
1862		if (idx < s_idx || idx == PF_PACKET)
1863			continue;
1864		if (rtnl_msg_handlers[idx] == NULL ||
1865		    rtnl_msg_handlers[idx][type].dumpit == NULL)
1866			continue;
1867		if (idx > s_idx)
1868			memset(&cb->args[0], 0, sizeof(cb->args));
 
 
 
1869		if (rtnl_msg_handlers[idx][type].dumpit(skb, cb))
1870			break;
1871	}
1872	cb->family = idx;
1873
1874	return skb->len;
1875}
1876
1877void rtmsg_ifinfo(int type, struct net_device *dev, unsigned change)
 
1878{
1879	struct net *net = dev_net(dev);
1880	struct sk_buff *skb;
1881	int err = -ENOBUFS;
1882	size_t if_info_size;
1883
1884	skb = nlmsg_new((if_info_size = if_nlmsg_size(dev)), GFP_KERNEL);
1885	if (skb == NULL)
1886		goto errout;
1887
1888	min_ifinfo_dump_size = max_t(u16, if_info_size, min_ifinfo_dump_size);
1889
1890	err = rtnl_fill_ifinfo(skb, dev, type, 0, 0, change, 0);
1891	if (err < 0) {
1892		/* -EMSGSIZE implies BUG in if_nlmsg_size() */
1893		WARN_ON(err == -EMSGSIZE);
1894		kfree_skb(skb);
1895		goto errout;
1896	}
1897	rtnl_notify(skb, net, 0, RTNLGRP_LINK, NULL, GFP_KERNEL);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1898	return;
1899errout:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1900	if (err < 0)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1901		rtnl_set_sk_err(net, RTNLGRP_LINK, err);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1902}
1903
1904/* Protected by RTNL sempahore.  */
1905static struct rtattr **rta_buf;
1906static int rtattr_max;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1907
1908/* Process one rtnetlink message. */
1909
1910static int rtnetlink_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
1911{
1912	struct net *net = sock_net(skb->sk);
1913	rtnl_doit_func doit;
1914	int sz_idx, kind;
1915	int min_len;
1916	int family;
1917	int type;
1918	int err;
1919
1920	type = nlh->nlmsg_type;
1921	if (type > RTM_MAX)
1922		return -EOPNOTSUPP;
1923
1924	type -= RTM_BASE;
1925
1926	/* All the messages must have at least 1 byte length */
1927	if (nlh->nlmsg_len < NLMSG_LENGTH(sizeof(struct rtgenmsg)))
1928		return 0;
1929
1930	family = ((struct rtgenmsg *)NLMSG_DATA(nlh))->rtgen_family;
1931	sz_idx = type>>2;
1932	kind = type&3;
1933
1934	if (kind != 2 && security_netlink_recv(skb, CAP_NET_ADMIN))
1935		return -EPERM;
1936
1937	if (kind == 2 && nlh->nlmsg_flags&NLM_F_DUMP) {
1938		struct sock *rtnl;
1939		rtnl_dumpit_func dumpit;
1940		rtnl_calcit_func calcit;
1941		u16 min_dump_alloc = 0;
1942
1943		dumpit = rtnl_get_dumpit(family, type);
1944		if (dumpit == NULL)
1945			return -EOPNOTSUPP;
1946		calcit = rtnl_get_calcit(family, type);
1947		if (calcit)
1948			min_dump_alloc = calcit(skb);
1949
1950		__rtnl_unlock();
1951		rtnl = net->rtnl;
1952		err = netlink_dump_start(rtnl, skb, nlh, dumpit,
1953					 NULL, min_dump_alloc);
 
 
 
 
 
1954		rtnl_lock();
1955		return err;
1956	}
1957
1958	memset(rta_buf, 0, (rtattr_max * sizeof(struct rtattr *)));
1959
1960	min_len = rtm_min[sz_idx];
1961	if (nlh->nlmsg_len < min_len)
1962		return -EINVAL;
1963
1964	if (nlh->nlmsg_len > min_len) {
1965		int attrlen = nlh->nlmsg_len - NLMSG_ALIGN(min_len);
1966		struct rtattr *attr = (void *)nlh + NLMSG_ALIGN(min_len);
1967
1968		while (RTA_OK(attr, attrlen)) {
1969			unsigned flavor = attr->rta_type;
1970			if (flavor) {
1971				if (flavor > rta_max[sz_idx])
1972					return -EINVAL;
1973				rta_buf[flavor-1] = attr;
1974			}
1975			attr = RTA_NEXT(attr, attrlen);
1976		}
1977	}
1978
1979	doit = rtnl_get_doit(family, type);
1980	if (doit == NULL)
1981		return -EOPNOTSUPP;
1982
1983	return doit(skb, nlh, (void *)&rta_buf[0]);
1984}
1985
1986static void rtnetlink_rcv(struct sk_buff *skb)
1987{
1988	rtnl_lock();
1989	netlink_rcv_skb(skb, &rtnetlink_rcv_msg);
1990	rtnl_unlock();
1991}
1992
1993static int rtnetlink_event(struct notifier_block *this, unsigned long event, void *ptr)
1994{
1995	struct net_device *dev = ptr;
1996
1997	switch (event) {
1998	case NETDEV_UP:
1999	case NETDEV_DOWN:
2000	case NETDEV_PRE_UP:
2001	case NETDEV_POST_INIT:
2002	case NETDEV_REGISTER:
2003	case NETDEV_CHANGE:
2004	case NETDEV_PRE_TYPE_CHANGE:
2005	case NETDEV_GOING_DOWN:
2006	case NETDEV_UNREGISTER:
2007	case NETDEV_UNREGISTER_BATCH:
2008	case NETDEV_RELEASE:
2009	case NETDEV_JOIN:
 
2010		break;
2011	default:
2012		rtmsg_ifinfo(RTM_NEWLINK, dev, 0);
2013		break;
2014	}
2015	return NOTIFY_DONE;
2016}
2017
2018static struct notifier_block rtnetlink_dev_notifier = {
2019	.notifier_call	= rtnetlink_event,
2020};
2021
2022
2023static int __net_init rtnetlink_net_init(struct net *net)
2024{
2025	struct sock *sk;
2026	sk = netlink_kernel_create(net, NETLINK_ROUTE, RTNLGRP_MAX,
2027				   rtnetlink_rcv, &rtnl_mutex, THIS_MODULE);
 
 
 
 
 
 
2028	if (!sk)
2029		return -ENOMEM;
2030	net->rtnl = sk;
2031	return 0;
2032}
2033
2034static void __net_exit rtnetlink_net_exit(struct net *net)
2035{
2036	netlink_kernel_release(net->rtnl);
2037	net->rtnl = NULL;
2038}
2039
2040static struct pernet_operations rtnetlink_net_ops = {
2041	.init = rtnetlink_net_init,
2042	.exit = rtnetlink_net_exit,
2043};
2044
2045void __init rtnetlink_init(void)
2046{
2047	int i;
2048
2049	rtattr_max = 0;
2050	for (i = 0; i < ARRAY_SIZE(rta_max); i++)
2051		if (rta_max[i] > rtattr_max)
2052			rtattr_max = rta_max[i];
2053	rta_buf = kmalloc(rtattr_max * sizeof(struct rtattr *), GFP_KERNEL);
2054	if (!rta_buf)
2055		panic("rtnetlink_init: cannot allocate rta_buf\n");
2056
2057	if (register_pernet_subsys(&rtnetlink_net_ops))
2058		panic("rtnetlink_init: cannot initialize rtnetlink\n");
2059
2060	netlink_set_nonroot(NETLINK_ROUTE, NL_NONROOT_RECV);
2061	register_netdevice_notifier(&rtnetlink_dev_notifier);
2062
2063	rtnl_register(PF_UNSPEC, RTM_GETLINK, rtnl_getlink,
2064		      rtnl_dump_ifinfo, rtnl_calcit);
2065	rtnl_register(PF_UNSPEC, RTM_SETLINK, rtnl_setlink, NULL, NULL);
2066	rtnl_register(PF_UNSPEC, RTM_NEWLINK, rtnl_newlink, NULL, NULL);
2067	rtnl_register(PF_UNSPEC, RTM_DELLINK, rtnl_dellink, NULL, NULL);
2068
2069	rtnl_register(PF_UNSPEC, RTM_GETADDR, NULL, rtnl_dump_all, NULL);
2070	rtnl_register(PF_UNSPEC, RTM_GETROUTE, NULL, rtnl_dump_all, NULL);
2071}
2072
v4.10.11
   1/*
   2 * INET		An implementation of the TCP/IP protocol suite for the LINUX
   3 *		operating system.  INET is implemented using the  BSD Socket
   4 *		interface as the means of communication with the user level.
   5 *
   6 *		Routing netlink socket interface: protocol independent part.
   7 *
   8 * Authors:	Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
   9 *
  10 *		This program is free software; you can redistribute it and/or
  11 *		modify it under the terms of the GNU General Public License
  12 *		as published by the Free Software Foundation; either version
  13 *		2 of the License, or (at your option) any later version.
  14 *
  15 *	Fixes:
  16 *	Vitaly E. Lavrov		RTA_OK arithmetics was wrong.
  17 */
  18
  19#include <linux/errno.h>
  20#include <linux/module.h>
  21#include <linux/types.h>
  22#include <linux/socket.h>
  23#include <linux/kernel.h>
  24#include <linux/timer.h>
  25#include <linux/string.h>
  26#include <linux/sockios.h>
  27#include <linux/net.h>
  28#include <linux/fcntl.h>
  29#include <linux/mm.h>
  30#include <linux/slab.h>
  31#include <linux/interrupt.h>
  32#include <linux/capability.h>
  33#include <linux/skbuff.h>
  34#include <linux/init.h>
  35#include <linux/security.h>
  36#include <linux/mutex.h>
  37#include <linux/if_addr.h>
  38#include <linux/if_bridge.h>
  39#include <linux/if_vlan.h>
  40#include <linux/pci.h>
  41#include <linux/etherdevice.h>
  42
  43#include <linux/uaccess.h>
 
  44
  45#include <linux/inet.h>
  46#include <linux/netdevice.h>
  47#include <net/switchdev.h>
  48#include <net/ip.h>
  49#include <net/protocol.h>
  50#include <net/arp.h>
  51#include <net/route.h>
  52#include <net/udp.h>
  53#include <net/tcp.h>
  54#include <net/sock.h>
  55#include <net/pkt_sched.h>
  56#include <net/fib_rules.h>
  57#include <net/rtnetlink.h>
  58#include <net/net_namespace.h>
  59
  60struct rtnl_link {
  61	rtnl_doit_func		doit;
  62	rtnl_dumpit_func	dumpit;
  63	rtnl_calcit_func 	calcit;
  64};
  65
  66static DEFINE_MUTEX(rtnl_mutex);
 
  67
  68void rtnl_lock(void)
  69{
  70	mutex_lock(&rtnl_mutex);
  71}
  72EXPORT_SYMBOL(rtnl_lock);
  73
  74static struct sk_buff *defer_kfree_skb_list;
  75void rtnl_kfree_skbs(struct sk_buff *head, struct sk_buff *tail)
  76{
  77	if (head && tail) {
  78		tail->next = defer_kfree_skb_list;
  79		defer_kfree_skb_list = head;
  80	}
  81}
  82EXPORT_SYMBOL(rtnl_kfree_skbs);
  83
  84void __rtnl_unlock(void)
  85{
  86	struct sk_buff *head = defer_kfree_skb_list;
  87
  88	defer_kfree_skb_list = NULL;
  89
  90	mutex_unlock(&rtnl_mutex);
  91
  92	while (head) {
  93		struct sk_buff *next = head->next;
  94
  95		kfree_skb(head);
  96		cond_resched();
  97		head = next;
  98	}
  99}
 100
 101void rtnl_unlock(void)
 102{
 103	/* This fellow will unlock it for us. */
 104	netdev_run_todo();
 105}
 106EXPORT_SYMBOL(rtnl_unlock);
 107
 108int rtnl_trylock(void)
 109{
 110	return mutex_trylock(&rtnl_mutex);
 111}
 112EXPORT_SYMBOL(rtnl_trylock);
 113
 114int rtnl_is_locked(void)
 115{
 116	return mutex_is_locked(&rtnl_mutex);
 117}
 118EXPORT_SYMBOL(rtnl_is_locked);
 119
 120#ifdef CONFIG_PROVE_LOCKING
 121bool lockdep_rtnl_is_held(void)
 122{
 123	return lockdep_is_held(&rtnl_mutex);
 124}
 125EXPORT_SYMBOL(lockdep_rtnl_is_held);
 126#endif /* #ifdef CONFIG_PROVE_LOCKING */
 127
 128static struct rtnl_link *rtnl_msg_handlers[RTNL_FAMILY_MAX + 1];
 129
 130static inline int rtm_msgindex(int msgtype)
 131{
 132	int msgindex = msgtype - RTM_BASE;
 133
 134	/*
 135	 * msgindex < 0 implies someone tried to register a netlink
 136	 * control code. msgindex >= RTM_NR_MSGTYPES may indicate that
 137	 * the message type has not been added to linux/rtnetlink.h
 138	 */
 139	BUG_ON(msgindex < 0 || msgindex >= RTM_NR_MSGTYPES);
 140
 141	return msgindex;
 142}
 143
 144static rtnl_doit_func rtnl_get_doit(int protocol, int msgindex)
 145{
 146	struct rtnl_link *tab;
 147
 148	if (protocol <= RTNL_FAMILY_MAX)
 149		tab = rtnl_msg_handlers[protocol];
 150	else
 151		tab = NULL;
 152
 153	if (tab == NULL || tab[msgindex].doit == NULL)
 154		tab = rtnl_msg_handlers[PF_UNSPEC];
 155
 156	return tab[msgindex].doit;
 157}
 158
 159static rtnl_dumpit_func rtnl_get_dumpit(int protocol, int msgindex)
 160{
 161	struct rtnl_link *tab;
 162
 163	if (protocol <= RTNL_FAMILY_MAX)
 164		tab = rtnl_msg_handlers[protocol];
 165	else
 166		tab = NULL;
 167
 168	if (tab == NULL || tab[msgindex].dumpit == NULL)
 169		tab = rtnl_msg_handlers[PF_UNSPEC];
 170
 171	return tab[msgindex].dumpit;
 172}
 173
 174static rtnl_calcit_func rtnl_get_calcit(int protocol, int msgindex)
 175{
 176	struct rtnl_link *tab;
 177
 178	if (protocol <= RTNL_FAMILY_MAX)
 179		tab = rtnl_msg_handlers[protocol];
 180	else
 181		tab = NULL;
 182
 183	if (tab == NULL || tab[msgindex].calcit == NULL)
 184		tab = rtnl_msg_handlers[PF_UNSPEC];
 185
 186	return tab[msgindex].calcit;
 187}
 188
 189/**
 190 * __rtnl_register - Register a rtnetlink message type
 191 * @protocol: Protocol family or PF_UNSPEC
 192 * @msgtype: rtnetlink message type
 193 * @doit: Function pointer called for each request message
 194 * @dumpit: Function pointer called for each dump request (NLM_F_DUMP) message
 195 * @calcit: Function pointer to calc size of dump message
 196 *
 197 * Registers the specified function pointers (at least one of them has
 198 * to be non-NULL) to be called whenever a request message for the
 199 * specified protocol family and message type is received.
 200 *
 201 * The special protocol family PF_UNSPEC may be used to define fallback
 202 * function pointers for the case when no entry for the specific protocol
 203 * family exists.
 204 *
 205 * Returns 0 on success or a negative error code.
 206 */
 207int __rtnl_register(int protocol, int msgtype,
 208		    rtnl_doit_func doit, rtnl_dumpit_func dumpit,
 209		    rtnl_calcit_func calcit)
 210{
 211	struct rtnl_link *tab;
 212	int msgindex;
 213
 214	BUG_ON(protocol < 0 || protocol > RTNL_FAMILY_MAX);
 215	msgindex = rtm_msgindex(msgtype);
 216
 217	tab = rtnl_msg_handlers[protocol];
 218	if (tab == NULL) {
 219		tab = kcalloc(RTM_NR_MSGTYPES, sizeof(*tab), GFP_KERNEL);
 220		if (tab == NULL)
 221			return -ENOBUFS;
 222
 223		rtnl_msg_handlers[protocol] = tab;
 224	}
 225
 226	if (doit)
 227		tab[msgindex].doit = doit;
 228
 229	if (dumpit)
 230		tab[msgindex].dumpit = dumpit;
 231
 232	if (calcit)
 233		tab[msgindex].calcit = calcit;
 234
 235	return 0;
 236}
 237EXPORT_SYMBOL_GPL(__rtnl_register);
 238
 239/**
 240 * rtnl_register - Register a rtnetlink message type
 241 *
 242 * Identical to __rtnl_register() but panics on failure. This is useful
 243 * as failure of this function is very unlikely, it can only happen due
 244 * to lack of memory when allocating the chain to store all message
 245 * handlers for a protocol. Meant for use in init functions where lack
 246 * of memory implies no sense in continuing.
 247 */
 248void rtnl_register(int protocol, int msgtype,
 249		   rtnl_doit_func doit, rtnl_dumpit_func dumpit,
 250		   rtnl_calcit_func calcit)
 251{
 252	if (__rtnl_register(protocol, msgtype, doit, dumpit, calcit) < 0)
 253		panic("Unable to register rtnetlink message handler, "
 254		      "protocol = %d, message type = %d\n",
 255		      protocol, msgtype);
 256}
 257EXPORT_SYMBOL_GPL(rtnl_register);
 258
 259/**
 260 * rtnl_unregister - Unregister a rtnetlink message type
 261 * @protocol: Protocol family or PF_UNSPEC
 262 * @msgtype: rtnetlink message type
 263 *
 264 * Returns 0 on success or a negative error code.
 265 */
 266int rtnl_unregister(int protocol, int msgtype)
 267{
 268	int msgindex;
 269
 270	BUG_ON(protocol < 0 || protocol > RTNL_FAMILY_MAX);
 271	msgindex = rtm_msgindex(msgtype);
 272
 273	if (rtnl_msg_handlers[protocol] == NULL)
 274		return -ENOENT;
 275
 276	rtnl_msg_handlers[protocol][msgindex].doit = NULL;
 277	rtnl_msg_handlers[protocol][msgindex].dumpit = NULL;
 278	rtnl_msg_handlers[protocol][msgindex].calcit = NULL;
 279
 280	return 0;
 281}
 282EXPORT_SYMBOL_GPL(rtnl_unregister);
 283
 284/**
 285 * rtnl_unregister_all - Unregister all rtnetlink message type of a protocol
 286 * @protocol : Protocol family or PF_UNSPEC
 287 *
 288 * Identical to calling rtnl_unregster() for all registered message types
 289 * of a certain protocol family.
 290 */
 291void rtnl_unregister_all(int protocol)
 292{
 293	BUG_ON(protocol < 0 || protocol > RTNL_FAMILY_MAX);
 294
 295	kfree(rtnl_msg_handlers[protocol]);
 296	rtnl_msg_handlers[protocol] = NULL;
 297}
 298EXPORT_SYMBOL_GPL(rtnl_unregister_all);
 299
 300static LIST_HEAD(link_ops);
 301
 302static const struct rtnl_link_ops *rtnl_link_ops_get(const char *kind)
 303{
 304	const struct rtnl_link_ops *ops;
 305
 306	list_for_each_entry(ops, &link_ops, list) {
 307		if (!strcmp(ops->kind, kind))
 308			return ops;
 309	}
 310	return NULL;
 311}
 312
 313/**
 314 * __rtnl_link_register - Register rtnl_link_ops with rtnetlink.
 315 * @ops: struct rtnl_link_ops * to register
 316 *
 317 * The caller must hold the rtnl_mutex. This function should be used
 318 * by drivers that create devices during module initialization. It
 319 * must be called before registering the devices.
 320 *
 321 * Returns 0 on success or a negative error code.
 322 */
 323int __rtnl_link_register(struct rtnl_link_ops *ops)
 324{
 325	if (rtnl_link_ops_get(ops->kind))
 326		return -EEXIST;
 327
 328	/* The check for setup is here because if ops
 329	 * does not have that filled up, it is not possible
 330	 * to use the ops for creating device. So do not
 331	 * fill up dellink as well. That disables rtnl_dellink.
 332	 */
 333	if (ops->setup && !ops->dellink)
 334		ops->dellink = unregister_netdevice_queue;
 335
 336	list_add_tail(&ops->list, &link_ops);
 337	return 0;
 338}
 339EXPORT_SYMBOL_GPL(__rtnl_link_register);
 340
 341/**
 342 * rtnl_link_register - Register rtnl_link_ops with rtnetlink.
 343 * @ops: struct rtnl_link_ops * to register
 344 *
 345 * Returns 0 on success or a negative error code.
 346 */
 347int rtnl_link_register(struct rtnl_link_ops *ops)
 348{
 349	int err;
 350
 351	rtnl_lock();
 352	err = __rtnl_link_register(ops);
 353	rtnl_unlock();
 354	return err;
 355}
 356EXPORT_SYMBOL_GPL(rtnl_link_register);
 357
 358static void __rtnl_kill_links(struct net *net, struct rtnl_link_ops *ops)
 359{
 360	struct net_device *dev;
 361	LIST_HEAD(list_kill);
 362
 363	for_each_netdev(net, dev) {
 364		if (dev->rtnl_link_ops == ops)
 365			ops->dellink(dev, &list_kill);
 366	}
 367	unregister_netdevice_many(&list_kill);
 368}
 369
 370/**
 371 * __rtnl_link_unregister - Unregister rtnl_link_ops from rtnetlink.
 372 * @ops: struct rtnl_link_ops * to unregister
 373 *
 374 * The caller must hold the rtnl_mutex.
 375 */
 376void __rtnl_link_unregister(struct rtnl_link_ops *ops)
 377{
 378	struct net *net;
 379
 380	for_each_net(net) {
 381		__rtnl_kill_links(net, ops);
 382	}
 383	list_del(&ops->list);
 384}
 385EXPORT_SYMBOL_GPL(__rtnl_link_unregister);
 386
 387/* Return with the rtnl_lock held when there are no network
 388 * devices unregistering in any network namespace.
 389 */
 390static void rtnl_lock_unregistering_all(void)
 391{
 392	struct net *net;
 393	bool unregistering;
 394	DEFINE_WAIT_FUNC(wait, woken_wake_function);
 395
 396	add_wait_queue(&netdev_unregistering_wq, &wait);
 397	for (;;) {
 398		unregistering = false;
 399		rtnl_lock();
 400		for_each_net(net) {
 401			if (net->dev_unreg_count > 0) {
 402				unregistering = true;
 403				break;
 404			}
 405		}
 406		if (!unregistering)
 407			break;
 408		__rtnl_unlock();
 409
 410		wait_woken(&wait, TASK_UNINTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT);
 411	}
 412	remove_wait_queue(&netdev_unregistering_wq, &wait);
 413}
 414
 415/**
 416 * rtnl_link_unregister - Unregister rtnl_link_ops from rtnetlink.
 417 * @ops: struct rtnl_link_ops * to unregister
 418 */
 419void rtnl_link_unregister(struct rtnl_link_ops *ops)
 420{
 421	/* Close the race with cleanup_net() */
 422	mutex_lock(&net_mutex);
 423	rtnl_lock_unregistering_all();
 424	__rtnl_link_unregister(ops);
 425	rtnl_unlock();
 426	mutex_unlock(&net_mutex);
 427}
 428EXPORT_SYMBOL_GPL(rtnl_link_unregister);
 429
 430static size_t rtnl_link_get_slave_info_data_size(const struct net_device *dev)
 431{
 432	struct net_device *master_dev;
 433	const struct rtnl_link_ops *ops;
 434
 435	master_dev = netdev_master_upper_dev_get((struct net_device *) dev);
 436	if (!master_dev)
 437		return 0;
 438	ops = master_dev->rtnl_link_ops;
 439	if (!ops || !ops->get_slave_size)
 440		return 0;
 441	/* IFLA_INFO_SLAVE_DATA + nested data */
 442	return nla_total_size(sizeof(struct nlattr)) +
 443	       ops->get_slave_size(master_dev, dev);
 444}
 445
 446static size_t rtnl_link_get_size(const struct net_device *dev)
 447{
 448	const struct rtnl_link_ops *ops = dev->rtnl_link_ops;
 449	size_t size;
 450
 451	if (!ops)
 452		return 0;
 453
 454	size = nla_total_size(sizeof(struct nlattr)) + /* IFLA_LINKINFO */
 455	       nla_total_size(strlen(ops->kind) + 1);  /* IFLA_INFO_KIND */
 456
 457	if (ops->get_size)
 458		/* IFLA_INFO_DATA + nested data */
 459		size += nla_total_size(sizeof(struct nlattr)) +
 460			ops->get_size(dev);
 461
 462	if (ops->get_xstats_size)
 463		/* IFLA_INFO_XSTATS */
 464		size += nla_total_size(ops->get_xstats_size(dev));
 465
 466	size += rtnl_link_get_slave_info_data_size(dev);
 467
 468	return size;
 469}
 470
 471static LIST_HEAD(rtnl_af_ops);
 472
 473static const struct rtnl_af_ops *rtnl_af_lookup(const int family)
 474{
 475	const struct rtnl_af_ops *ops;
 476
 477	list_for_each_entry(ops, &rtnl_af_ops, list) {
 478		if (ops->family == family)
 479			return ops;
 480	}
 481
 482	return NULL;
 483}
 484
 485/**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 486 * rtnl_af_register - Register rtnl_af_ops with rtnetlink.
 487 * @ops: struct rtnl_af_ops * to register
 488 *
 489 * Returns 0 on success or a negative error code.
 490 */
 491void rtnl_af_register(struct rtnl_af_ops *ops)
 492{
 
 
 493	rtnl_lock();
 494	list_add_tail(&ops->list, &rtnl_af_ops);
 495	rtnl_unlock();
 
 496}
 497EXPORT_SYMBOL_GPL(rtnl_af_register);
 498
 499/**
 500 * __rtnl_af_unregister - Unregister rtnl_af_ops from rtnetlink.
 501 * @ops: struct rtnl_af_ops * to unregister
 502 *
 503 * The caller must hold the rtnl_mutex.
 504 */
 505void __rtnl_af_unregister(struct rtnl_af_ops *ops)
 506{
 507	list_del(&ops->list);
 508}
 509EXPORT_SYMBOL_GPL(__rtnl_af_unregister);
 510
 511/**
 512 * rtnl_af_unregister - Unregister rtnl_af_ops from rtnetlink.
 513 * @ops: struct rtnl_af_ops * to unregister
 514 */
 515void rtnl_af_unregister(struct rtnl_af_ops *ops)
 516{
 517	rtnl_lock();
 518	__rtnl_af_unregister(ops);
 519	rtnl_unlock();
 520}
 521EXPORT_SYMBOL_GPL(rtnl_af_unregister);
 522
 523static size_t rtnl_link_get_af_size(const struct net_device *dev,
 524				    u32 ext_filter_mask)
 525{
 526	struct rtnl_af_ops *af_ops;
 527	size_t size;
 528
 529	/* IFLA_AF_SPEC */
 530	size = nla_total_size(sizeof(struct nlattr));
 531
 532	list_for_each_entry(af_ops, &rtnl_af_ops, list) {
 533		if (af_ops->get_link_af_size) {
 534			/* AF_* + nested data */
 535			size += nla_total_size(sizeof(struct nlattr)) +
 536				af_ops->get_link_af_size(dev, ext_filter_mask);
 537		}
 538	}
 539
 540	return size;
 541}
 542
 543static bool rtnl_have_link_slave_info(const struct net_device *dev)
 544{
 545	struct net_device *master_dev;
 
 
 546
 547	master_dev = netdev_master_upper_dev_get((struct net_device *) dev);
 548	if (master_dev && master_dev->rtnl_link_ops)
 549		return true;
 550	return false;
 551}
 552
 553static int rtnl_link_slave_info_fill(struct sk_buff *skb,
 554				     const struct net_device *dev)
 555{
 556	struct net_device *master_dev;
 557	const struct rtnl_link_ops *ops;
 558	struct nlattr *slave_data;
 559	int err;
 560
 561	master_dev = netdev_master_upper_dev_get((struct net_device *) dev);
 562	if (!master_dev)
 563		return 0;
 564	ops = master_dev->rtnl_link_ops;
 565	if (!ops)
 566		return 0;
 567	if (nla_put_string(skb, IFLA_INFO_SLAVE_KIND, ops->kind) < 0)
 568		return -EMSGSIZE;
 569	if (ops->fill_slave_info) {
 570		slave_data = nla_nest_start(skb, IFLA_INFO_SLAVE_DATA);
 571		if (!slave_data)
 572			return -EMSGSIZE;
 573		err = ops->fill_slave_info(skb, master_dev, dev);
 574		if (err < 0)
 575			goto err_cancel_slave_data;
 576		nla_nest_end(skb, slave_data);
 577	}
 578	return 0;
 579
 580err_cancel_slave_data:
 581	nla_nest_cancel(skb, slave_data);
 582	return err;
 583}
 584
 585static int rtnl_link_info_fill(struct sk_buff *skb,
 586			       const struct net_device *dev)
 587{
 588	const struct rtnl_link_ops *ops = dev->rtnl_link_ops;
 589	struct nlattr *data;
 590	int err;
 591
 592	if (!ops)
 593		return 0;
 594	if (nla_put_string(skb, IFLA_INFO_KIND, ops->kind) < 0)
 595		return -EMSGSIZE;
 596	if (ops->fill_xstats) {
 597		err = ops->fill_xstats(skb, dev);
 598		if (err < 0)
 599			return err;
 600	}
 601	if (ops->fill_info) {
 602		data = nla_nest_start(skb, IFLA_INFO_DATA);
 603		if (data == NULL)
 604			return -EMSGSIZE;
 605		err = ops->fill_info(skb, dev);
 606		if (err < 0)
 607			goto err_cancel_data;
 608		nla_nest_end(skb, data);
 609	}
 
 
 610	return 0;
 611
 612err_cancel_data:
 613	nla_nest_cancel(skb, data);
 
 
 
 614	return err;
 615}
 616
 617static int rtnl_link_fill(struct sk_buff *skb, const struct net_device *dev)
 618{
 619	struct nlattr *linkinfo;
 620	int err = -EMSGSIZE;
 
 
 
 
 
 
 
 
 
 621
 622	linkinfo = nla_nest_start(skb, IFLA_LINKINFO);
 623	if (linkinfo == NULL)
 624		goto out;
 
 
 
 
 
 
 
 
 625
 626	err = rtnl_link_info_fill(skb, dev);
 627	if (err < 0)
 628		goto err_cancel_link;
 629
 630	err = rtnl_link_slave_info_fill(skb, dev);
 631	if (err < 0)
 632		goto err_cancel_link;
 633
 634	nla_nest_end(skb, linkinfo);
 635	return 0;
 636
 637err_cancel_link:
 638	nla_nest_cancel(skb, linkinfo);
 639out:
 640	return err;
 641}
 
 642
 643int rtnetlink_send(struct sk_buff *skb, struct net *net, u32 pid, unsigned int group, int echo)
 644{
 645	struct sock *rtnl = net->rtnl;
 646	int err = 0;
 647
 648	NETLINK_CB(skb).dst_group = group;
 649	if (echo)
 650		atomic_inc(&skb->users);
 651	netlink_broadcast(rtnl, skb, pid, group, GFP_KERNEL);
 652	if (echo)
 653		err = netlink_unicast(rtnl, skb, pid, MSG_DONTWAIT);
 654	return err;
 655}
 656
 657int rtnl_unicast(struct sk_buff *skb, struct net *net, u32 pid)
 658{
 659	struct sock *rtnl = net->rtnl;
 660
 661	return nlmsg_unicast(rtnl, skb, pid);
 662}
 663EXPORT_SYMBOL(rtnl_unicast);
 664
 665void rtnl_notify(struct sk_buff *skb, struct net *net, u32 pid, u32 group,
 666		 struct nlmsghdr *nlh, gfp_t flags)
 667{
 668	struct sock *rtnl = net->rtnl;
 669	int report = 0;
 670
 671	if (nlh)
 672		report = nlmsg_report(nlh);
 673
 674	nlmsg_notify(rtnl, skb, pid, group, report, flags);
 675}
 676EXPORT_SYMBOL(rtnl_notify);
 677
 678void rtnl_set_sk_err(struct net *net, u32 group, int error)
 679{
 680	struct sock *rtnl = net->rtnl;
 681
 682	netlink_set_err(rtnl, 0, group, error);
 683}
 684EXPORT_SYMBOL(rtnl_set_sk_err);
 685
 686int rtnetlink_put_metrics(struct sk_buff *skb, u32 *metrics)
 687{
 688	struct nlattr *mx;
 689	int i, valid = 0;
 690
 691	mx = nla_nest_start(skb, RTA_METRICS);
 692	if (mx == NULL)
 693		return -ENOBUFS;
 694
 695	for (i = 0; i < RTAX_MAX; i++) {
 696		if (metrics[i]) {
 697			if (i == RTAX_CC_ALGO - 1) {
 698				char tmp[TCP_CA_NAME_MAX], *name;
 699
 700				name = tcp_ca_get_name_by_key(metrics[i], tmp);
 701				if (!name)
 702					continue;
 703				if (nla_put_string(skb, i + 1, name))
 704					goto nla_put_failure;
 705			} else if (i == RTAX_FEATURES - 1) {
 706				u32 user_features = metrics[i] & RTAX_FEATURE_MASK;
 707
 708				if (!user_features)
 709					continue;
 710				BUILD_BUG_ON(RTAX_FEATURE_MASK & DST_FEATURE_MASK);
 711				if (nla_put_u32(skb, i + 1, user_features))
 712					goto nla_put_failure;
 713			} else {
 714				if (nla_put_u32(skb, i + 1, metrics[i]))
 715					goto nla_put_failure;
 716			}
 717			valid++;
 
 718		}
 719	}
 720
 721	if (!valid) {
 722		nla_nest_cancel(skb, mx);
 723		return 0;
 724	}
 725
 726	return nla_nest_end(skb, mx);
 727
 728nla_put_failure:
 729	nla_nest_cancel(skb, mx);
 730	return -EMSGSIZE;
 731}
 732EXPORT_SYMBOL(rtnetlink_put_metrics);
 733
 734int rtnl_put_cacheinfo(struct sk_buff *skb, struct dst_entry *dst, u32 id,
 735		       long expires, u32 error)
 736{
 737	struct rta_cacheinfo ci = {
 738		.rta_lastuse = jiffies_delta_to_clock_t(jiffies - dst->lastuse),
 739		.rta_used = dst->__use,
 740		.rta_clntref = atomic_read(&(dst->__refcnt)),
 741		.rta_error = error,
 742		.rta_id =  id,
 
 
 743	};
 744
 745	if (expires) {
 746		unsigned long clock;
 747
 748		clock = jiffies_to_clock_t(abs(expires));
 749		clock = min_t(unsigned long, clock, INT_MAX);
 750		ci.rta_expires = (expires > 0) ? clock : -clock;
 751	}
 752	return nla_put(skb, RTA_CACHEINFO, sizeof(ci), &ci);
 753}
 754EXPORT_SYMBOL_GPL(rtnl_put_cacheinfo);
 755
 756static void set_operstate(struct net_device *dev, unsigned char transition)
 757{
 758	unsigned char operstate = dev->operstate;
 759
 760	switch (transition) {
 761	case IF_OPER_UP:
 762		if ((operstate == IF_OPER_DORMANT ||
 763		     operstate == IF_OPER_UNKNOWN) &&
 764		    !netif_dormant(dev))
 765			operstate = IF_OPER_UP;
 766		break;
 767
 768	case IF_OPER_DORMANT:
 769		if (operstate == IF_OPER_UP ||
 770		    operstate == IF_OPER_UNKNOWN)
 771			operstate = IF_OPER_DORMANT;
 772		break;
 773	}
 774
 775	if (dev->operstate != operstate) {
 776		write_lock_bh(&dev_base_lock);
 777		dev->operstate = operstate;
 778		write_unlock_bh(&dev_base_lock);
 779		netdev_state_change(dev);
 780	}
 781}
 782
 783static unsigned int rtnl_dev_get_flags(const struct net_device *dev)
 784{
 785	return (dev->flags & ~(IFF_PROMISC | IFF_ALLMULTI)) |
 786	       (dev->gflags & (IFF_PROMISC | IFF_ALLMULTI));
 787}
 788
 789static unsigned int rtnl_dev_combine_flags(const struct net_device *dev,
 790					   const struct ifinfomsg *ifm)
 791{
 792	unsigned int flags = ifm->ifi_flags;
 793
 794	/* bugwards compatibility: ifi_change == 0 is treated as ~0 */
 795	if (ifm->ifi_change)
 796		flags = (flags & ifm->ifi_change) |
 797			(rtnl_dev_get_flags(dev) & ~ifm->ifi_change);
 798
 799	return flags;
 800}
 801
 802static void copy_rtnl_link_stats(struct rtnl_link_stats *a,
 803				 const struct rtnl_link_stats64 *b)
 804{
 805	a->rx_packets = b->rx_packets;
 806	a->tx_packets = b->tx_packets;
 807	a->rx_bytes = b->rx_bytes;
 808	a->tx_bytes = b->tx_bytes;
 809	a->rx_errors = b->rx_errors;
 810	a->tx_errors = b->tx_errors;
 811	a->rx_dropped = b->rx_dropped;
 812	a->tx_dropped = b->tx_dropped;
 813
 814	a->multicast = b->multicast;
 815	a->collisions = b->collisions;
 816
 817	a->rx_length_errors = b->rx_length_errors;
 818	a->rx_over_errors = b->rx_over_errors;
 819	a->rx_crc_errors = b->rx_crc_errors;
 820	a->rx_frame_errors = b->rx_frame_errors;
 821	a->rx_fifo_errors = b->rx_fifo_errors;
 822	a->rx_missed_errors = b->rx_missed_errors;
 823
 824	a->tx_aborted_errors = b->tx_aborted_errors;
 825	a->tx_carrier_errors = b->tx_carrier_errors;
 826	a->tx_fifo_errors = b->tx_fifo_errors;
 827	a->tx_heartbeat_errors = b->tx_heartbeat_errors;
 828	a->tx_window_errors = b->tx_window_errors;
 829
 830	a->rx_compressed = b->rx_compressed;
 831	a->tx_compressed = b->tx_compressed;
 
 832
 833	a->rx_nohandler = b->rx_nohandler;
 
 
 834}
 835
 836/* All VF info */
 837static inline int rtnl_vfinfo_size(const struct net_device *dev,
 838				   u32 ext_filter_mask)
 839{
 840	if (dev->dev.parent && dev_is_pci(dev->dev.parent) &&
 841	    (ext_filter_mask & RTEXT_FILTER_VF)) {
 842		int num_vfs = dev_num_vf(dev->dev.parent);
 843		size_t size = nla_total_size(0);
 
 844		size += num_vfs *
 845			(nla_total_size(0) +
 846			 nla_total_size(sizeof(struct ifla_vf_mac)) +
 847			 nla_total_size(sizeof(struct ifla_vf_vlan)) +
 848			 nla_total_size(0) + /* nest IFLA_VF_VLAN_LIST */
 849			 nla_total_size(MAX_VLAN_LIST_LEN *
 850					sizeof(struct ifla_vf_vlan_info)) +
 851			 nla_total_size(sizeof(struct ifla_vf_spoofchk)) +
 852			 nla_total_size(sizeof(struct ifla_vf_tx_rate)) +
 853			 nla_total_size(sizeof(struct ifla_vf_rate)) +
 854			 nla_total_size(sizeof(struct ifla_vf_link_state)) +
 855			 nla_total_size(sizeof(struct ifla_vf_rss_query_en)) +
 856			 nla_total_size(0) + /* nest IFLA_VF_STATS */
 857			 /* IFLA_VF_STATS_RX_PACKETS */
 858			 nla_total_size_64bit(sizeof(__u64)) +
 859			 /* IFLA_VF_STATS_TX_PACKETS */
 860			 nla_total_size_64bit(sizeof(__u64)) +
 861			 /* IFLA_VF_STATS_RX_BYTES */
 862			 nla_total_size_64bit(sizeof(__u64)) +
 863			 /* IFLA_VF_STATS_TX_BYTES */
 864			 nla_total_size_64bit(sizeof(__u64)) +
 865			 /* IFLA_VF_STATS_BROADCAST */
 866			 nla_total_size_64bit(sizeof(__u64)) +
 867			 /* IFLA_VF_STATS_MULTICAST */
 868			 nla_total_size_64bit(sizeof(__u64)) +
 869			 nla_total_size(sizeof(struct ifla_vf_trust)));
 870		return size;
 871	} else
 872		return 0;
 873}
 874
 875static size_t rtnl_port_size(const struct net_device *dev,
 876			     u32 ext_filter_mask)
 877{
 878	size_t port_size = nla_total_size(4)		/* PORT_VF */
 879		+ nla_total_size(PORT_PROFILE_MAX)	/* PORT_PROFILE */
 880		+ nla_total_size(sizeof(struct ifla_port_vsi))
 881							/* PORT_VSI_TYPE */
 882		+ nla_total_size(PORT_UUID_MAX)		/* PORT_INSTANCE_UUID */
 883		+ nla_total_size(PORT_UUID_MAX)		/* PORT_HOST_UUID */
 884		+ nla_total_size(1)			/* PROT_VDP_REQUEST */
 885		+ nla_total_size(2);			/* PORT_VDP_RESPONSE */
 886	size_t vf_ports_size = nla_total_size(sizeof(struct nlattr));
 887	size_t vf_port_size = nla_total_size(sizeof(struct nlattr))
 888		+ port_size;
 889	size_t port_self_size = nla_total_size(sizeof(struct nlattr))
 890		+ port_size;
 891
 892	if (!dev->netdev_ops->ndo_get_vf_port || !dev->dev.parent ||
 893	    !(ext_filter_mask & RTEXT_FILTER_VF))
 894		return 0;
 895	if (dev_num_vf(dev->dev.parent))
 896		return port_self_size + vf_ports_size +
 897			vf_port_size * dev_num_vf(dev->dev.parent);
 898	else
 899		return port_self_size;
 900}
 901
 902static size_t rtnl_xdp_size(const struct net_device *dev)
 903{
 904	size_t xdp_size = nla_total_size(0) +	/* nest IFLA_XDP */
 905			  nla_total_size(1);	/* XDP_ATTACHED */
 906
 907	if (!dev->netdev_ops->ndo_xdp)
 908		return 0;
 909	else
 910		return xdp_size;
 911}
 912
 913static noinline size_t if_nlmsg_size(const struct net_device *dev,
 914				     u32 ext_filter_mask)
 915{
 916	return NLMSG_ALIGN(sizeof(struct ifinfomsg))
 917	       + nla_total_size(IFNAMSIZ) /* IFLA_IFNAME */
 918	       + nla_total_size(IFALIASZ) /* IFLA_IFALIAS */
 919	       + nla_total_size(IFNAMSIZ) /* IFLA_QDISC */
 920	       + nla_total_size_64bit(sizeof(struct rtnl_link_ifmap))
 921	       + nla_total_size(sizeof(struct rtnl_link_stats))
 922	       + nla_total_size_64bit(sizeof(struct rtnl_link_stats64))
 923	       + nla_total_size(MAX_ADDR_LEN) /* IFLA_ADDRESS */
 924	       + nla_total_size(MAX_ADDR_LEN) /* IFLA_BROADCAST */
 925	       + nla_total_size(4) /* IFLA_TXQLEN */
 926	       + nla_total_size(4) /* IFLA_WEIGHT */
 927	       + nla_total_size(4) /* IFLA_MTU */
 928	       + nla_total_size(4) /* IFLA_LINK */
 929	       + nla_total_size(4) /* IFLA_MASTER */
 930	       + nla_total_size(1) /* IFLA_CARRIER */
 931	       + nla_total_size(4) /* IFLA_PROMISCUITY */
 932	       + nla_total_size(4) /* IFLA_NUM_TX_QUEUES */
 933	       + nla_total_size(4) /* IFLA_NUM_RX_QUEUES */
 934	       + nla_total_size(4) /* IFLA_GSO_MAX_SEGS */
 935	       + nla_total_size(4) /* IFLA_GSO_MAX_SIZE */
 936	       + nla_total_size(1) /* IFLA_OPERSTATE */
 937	       + nla_total_size(1) /* IFLA_LINKMODE */
 938	       + nla_total_size(4) /* IFLA_CARRIER_CHANGES */
 939	       + nla_total_size(4) /* IFLA_LINK_NETNSID */
 940	       + nla_total_size(ext_filter_mask
 941			        & RTEXT_FILTER_VF ? 4 : 0) /* IFLA_NUM_VF */
 942	       + rtnl_vfinfo_size(dev, ext_filter_mask) /* IFLA_VFINFO_LIST */
 943	       + rtnl_port_size(dev, ext_filter_mask) /* IFLA_VF_PORTS + IFLA_PORT_SELF */
 944	       + rtnl_link_get_size(dev) /* IFLA_LINKINFO */
 945	       + rtnl_link_get_af_size(dev, ext_filter_mask) /* IFLA_AF_SPEC */
 946	       + nla_total_size(MAX_PHYS_ITEM_ID_LEN) /* IFLA_PHYS_PORT_ID */
 947	       + nla_total_size(MAX_PHYS_ITEM_ID_LEN) /* IFLA_PHYS_SWITCH_ID */
 948	       + nla_total_size(IFNAMSIZ) /* IFLA_PHYS_PORT_NAME */
 949	       + rtnl_xdp_size(dev) /* IFLA_XDP */
 950	       + nla_total_size(1); /* IFLA_PROTO_DOWN */
 951
 952}
 953
 954static int rtnl_vf_ports_fill(struct sk_buff *skb, struct net_device *dev)
 955{
 956	struct nlattr *vf_ports;
 957	struct nlattr *vf_port;
 958	int vf;
 959	int err;
 960
 961	vf_ports = nla_nest_start(skb, IFLA_VF_PORTS);
 962	if (!vf_ports)
 963		return -EMSGSIZE;
 964
 965	for (vf = 0; vf < dev_num_vf(dev->dev.parent); vf++) {
 966		vf_port = nla_nest_start(skb, IFLA_VF_PORT);
 967		if (!vf_port)
 968			goto nla_put_failure;
 969		if (nla_put_u32(skb, IFLA_PORT_VF, vf))
 970			goto nla_put_failure;
 971		err = dev->netdev_ops->ndo_get_vf_port(dev, vf, skb);
 972		if (err == -EMSGSIZE)
 973			goto nla_put_failure;
 974		if (err) {
 975			nla_nest_cancel(skb, vf_port);
 976			continue;
 977		}
 978		nla_nest_end(skb, vf_port);
 979	}
 980
 981	nla_nest_end(skb, vf_ports);
 982
 983	return 0;
 984
 985nla_put_failure:
 986	nla_nest_cancel(skb, vf_ports);
 987	return -EMSGSIZE;
 988}
 989
 990static int rtnl_port_self_fill(struct sk_buff *skb, struct net_device *dev)
 991{
 992	struct nlattr *port_self;
 993	int err;
 994
 995	port_self = nla_nest_start(skb, IFLA_PORT_SELF);
 996	if (!port_self)
 997		return -EMSGSIZE;
 998
 999	err = dev->netdev_ops->ndo_get_vf_port(dev, PORT_SELF_VF, skb);
1000	if (err) {
1001		nla_nest_cancel(skb, port_self);
1002		return (err == -EMSGSIZE) ? err : 0;
1003	}
1004
1005	nla_nest_end(skb, port_self);
1006
1007	return 0;
1008}
1009
1010static int rtnl_port_fill(struct sk_buff *skb, struct net_device *dev,
1011			  u32 ext_filter_mask)
1012{
1013	int err;
1014
1015	if (!dev->netdev_ops->ndo_get_vf_port || !dev->dev.parent ||
1016	    !(ext_filter_mask & RTEXT_FILTER_VF))
1017		return 0;
1018
1019	err = rtnl_port_self_fill(skb, dev);
1020	if (err)
1021		return err;
1022
1023	if (dev_num_vf(dev->dev.parent)) {
1024		err = rtnl_vf_ports_fill(skb, dev);
1025		if (err)
1026			return err;
1027	}
1028
1029	return 0;
1030}
1031
1032static int rtnl_phys_port_id_fill(struct sk_buff *skb, struct net_device *dev)
1033{
1034	int err;
1035	struct netdev_phys_item_id ppid;
1036
1037	err = dev_get_phys_port_id(dev, &ppid);
1038	if (err) {
1039		if (err == -EOPNOTSUPP)
1040			return 0;
1041		return err;
1042	}
1043
1044	if (nla_put(skb, IFLA_PHYS_PORT_ID, ppid.id_len, ppid.id))
1045		return -EMSGSIZE;
1046
1047	return 0;
1048}
1049
1050static int rtnl_phys_port_name_fill(struct sk_buff *skb, struct net_device *dev)
1051{
1052	char name[IFNAMSIZ];
1053	int err;
1054
1055	err = dev_get_phys_port_name(dev, name, sizeof(name));
1056	if (err) {
1057		if (err == -EOPNOTSUPP)
1058			return 0;
1059		return err;
1060	}
1061
1062	if (nla_put(skb, IFLA_PHYS_PORT_NAME, strlen(name), name))
1063		return -EMSGSIZE;
1064
1065	return 0;
1066}
1067
1068static int rtnl_phys_switch_id_fill(struct sk_buff *skb, struct net_device *dev)
1069{
1070	int err;
1071	struct switchdev_attr attr = {
1072		.orig_dev = dev,
1073		.id = SWITCHDEV_ATTR_ID_PORT_PARENT_ID,
1074		.flags = SWITCHDEV_F_NO_RECURSE,
1075	};
1076
1077	err = switchdev_port_attr_get(dev, &attr);
1078	if (err) {
1079		if (err == -EOPNOTSUPP)
1080			return 0;
1081		return err;
1082	}
1083
1084	if (nla_put(skb, IFLA_PHYS_SWITCH_ID, attr.u.ppid.id_len,
1085		    attr.u.ppid.id))
1086		return -EMSGSIZE;
1087
1088	return 0;
1089}
1090
1091static noinline_for_stack int rtnl_fill_stats(struct sk_buff *skb,
1092					      struct net_device *dev)
1093{
1094	struct rtnl_link_stats64 *sp;
1095	struct nlattr *attr;
1096
1097	attr = nla_reserve_64bit(skb, IFLA_STATS64,
1098				 sizeof(struct rtnl_link_stats64), IFLA_PAD);
1099	if (!attr)
1100		return -EMSGSIZE;
1101
1102	sp = nla_data(attr);
1103	dev_get_stats(dev, sp);
1104
1105	attr = nla_reserve(skb, IFLA_STATS,
1106			   sizeof(struct rtnl_link_stats));
1107	if (!attr)
1108		return -EMSGSIZE;
1109
1110	copy_rtnl_link_stats(nla_data(attr), sp);
1111
1112	return 0;
1113}
1114
1115static noinline_for_stack int rtnl_fill_vfinfo(struct sk_buff *skb,
1116					       struct net_device *dev,
1117					       int vfs_num,
1118					       struct nlattr *vfinfo)
1119{
1120	struct ifla_vf_rss_query_en vf_rss_query_en;
1121	struct nlattr *vf, *vfstats, *vfvlanlist;
1122	struct ifla_vf_link_state vf_linkstate;
1123	struct ifla_vf_vlan_info vf_vlan_info;
1124	struct ifla_vf_spoofchk vf_spoofchk;
1125	struct ifla_vf_tx_rate vf_tx_rate;
1126	struct ifla_vf_stats vf_stats;
1127	struct ifla_vf_trust vf_trust;
1128	struct ifla_vf_vlan vf_vlan;
1129	struct ifla_vf_rate vf_rate;
1130	struct ifla_vf_mac vf_mac;
1131	struct ifla_vf_info ivi;
1132
1133	/* Not all SR-IOV capable drivers support the
1134	 * spoofcheck and "RSS query enable" query.  Preset to
1135	 * -1 so the user space tool can detect that the driver
1136	 * didn't report anything.
1137	 */
1138	ivi.spoofchk = -1;
1139	ivi.rss_query_en = -1;
1140	ivi.trusted = -1;
1141	memset(ivi.mac, 0, sizeof(ivi.mac));
1142	/* The default value for VF link state is "auto"
1143	 * IFLA_VF_LINK_STATE_AUTO which equals zero
1144	 */
1145	ivi.linkstate = 0;
1146	/* VLAN Protocol by default is 802.1Q */
1147	ivi.vlan_proto = htons(ETH_P_8021Q);
1148	if (dev->netdev_ops->ndo_get_vf_config(dev, vfs_num, &ivi))
1149		return 0;
1150
1151	memset(&vf_vlan_info, 0, sizeof(vf_vlan_info));
1152
1153	vf_mac.vf =
1154		vf_vlan.vf =
1155		vf_vlan_info.vf =
1156		vf_rate.vf =
1157		vf_tx_rate.vf =
1158		vf_spoofchk.vf =
1159		vf_linkstate.vf =
1160		vf_rss_query_en.vf =
1161		vf_trust.vf = ivi.vf;
1162
1163	memcpy(vf_mac.mac, ivi.mac, sizeof(ivi.mac));
1164	vf_vlan.vlan = ivi.vlan;
1165	vf_vlan.qos = ivi.qos;
1166	vf_vlan_info.vlan = ivi.vlan;
1167	vf_vlan_info.qos = ivi.qos;
1168	vf_vlan_info.vlan_proto = ivi.vlan_proto;
1169	vf_tx_rate.rate = ivi.max_tx_rate;
1170	vf_rate.min_tx_rate = ivi.min_tx_rate;
1171	vf_rate.max_tx_rate = ivi.max_tx_rate;
1172	vf_spoofchk.setting = ivi.spoofchk;
1173	vf_linkstate.link_state = ivi.linkstate;
1174	vf_rss_query_en.setting = ivi.rss_query_en;
1175	vf_trust.setting = ivi.trusted;
1176	vf = nla_nest_start(skb, IFLA_VF_INFO);
1177	if (!vf)
1178		goto nla_put_vfinfo_failure;
1179	if (nla_put(skb, IFLA_VF_MAC, sizeof(vf_mac), &vf_mac) ||
1180	    nla_put(skb, IFLA_VF_VLAN, sizeof(vf_vlan), &vf_vlan) ||
1181	    nla_put(skb, IFLA_VF_RATE, sizeof(vf_rate),
1182		    &vf_rate) ||
1183	    nla_put(skb, IFLA_VF_TX_RATE, sizeof(vf_tx_rate),
1184		    &vf_tx_rate) ||
1185	    nla_put(skb, IFLA_VF_SPOOFCHK, sizeof(vf_spoofchk),
1186		    &vf_spoofchk) ||
1187	    nla_put(skb, IFLA_VF_LINK_STATE, sizeof(vf_linkstate),
1188		    &vf_linkstate) ||
1189	    nla_put(skb, IFLA_VF_RSS_QUERY_EN,
1190		    sizeof(vf_rss_query_en),
1191		    &vf_rss_query_en) ||
1192	    nla_put(skb, IFLA_VF_TRUST,
1193		    sizeof(vf_trust), &vf_trust))
1194		goto nla_put_vf_failure;
1195	vfvlanlist = nla_nest_start(skb, IFLA_VF_VLAN_LIST);
1196	if (!vfvlanlist)
1197		goto nla_put_vf_failure;
1198	if (nla_put(skb, IFLA_VF_VLAN_INFO, sizeof(vf_vlan_info),
1199		    &vf_vlan_info)) {
1200		nla_nest_cancel(skb, vfvlanlist);
1201		goto nla_put_vf_failure;
1202	}
1203	nla_nest_end(skb, vfvlanlist);
1204	memset(&vf_stats, 0, sizeof(vf_stats));
1205	if (dev->netdev_ops->ndo_get_vf_stats)
1206		dev->netdev_ops->ndo_get_vf_stats(dev, vfs_num,
1207						&vf_stats);
1208	vfstats = nla_nest_start(skb, IFLA_VF_STATS);
1209	if (!vfstats)
1210		goto nla_put_vf_failure;
1211	if (nla_put_u64_64bit(skb, IFLA_VF_STATS_RX_PACKETS,
1212			      vf_stats.rx_packets, IFLA_VF_STATS_PAD) ||
1213	    nla_put_u64_64bit(skb, IFLA_VF_STATS_TX_PACKETS,
1214			      vf_stats.tx_packets, IFLA_VF_STATS_PAD) ||
1215	    nla_put_u64_64bit(skb, IFLA_VF_STATS_RX_BYTES,
1216			      vf_stats.rx_bytes, IFLA_VF_STATS_PAD) ||
1217	    nla_put_u64_64bit(skb, IFLA_VF_STATS_TX_BYTES,
1218			      vf_stats.tx_bytes, IFLA_VF_STATS_PAD) ||
1219	    nla_put_u64_64bit(skb, IFLA_VF_STATS_BROADCAST,
1220			      vf_stats.broadcast, IFLA_VF_STATS_PAD) ||
1221	    nla_put_u64_64bit(skb, IFLA_VF_STATS_MULTICAST,
1222			      vf_stats.multicast, IFLA_VF_STATS_PAD)) {
1223		nla_nest_cancel(skb, vfstats);
1224		goto nla_put_vf_failure;
1225	}
1226	nla_nest_end(skb, vfstats);
1227	nla_nest_end(skb, vf);
1228	return 0;
1229
1230nla_put_vf_failure:
1231	nla_nest_cancel(skb, vf);
1232nla_put_vfinfo_failure:
1233	nla_nest_cancel(skb, vfinfo);
1234	return -EMSGSIZE;
1235}
1236
1237static int rtnl_fill_link_ifmap(struct sk_buff *skb, struct net_device *dev)
1238{
1239	struct rtnl_link_ifmap map;
1240
1241	memset(&map, 0, sizeof(map));
1242	map.mem_start   = dev->mem_start;
1243	map.mem_end     = dev->mem_end;
1244	map.base_addr   = dev->base_addr;
1245	map.irq         = dev->irq;
1246	map.dma         = dev->dma;
1247	map.port        = dev->if_port;
1248
1249	if (nla_put_64bit(skb, IFLA_MAP, sizeof(map), &map, IFLA_PAD))
1250		return -EMSGSIZE;
1251
1252	return 0;
1253}
1254
1255static int rtnl_xdp_fill(struct sk_buff *skb, struct net_device *dev)
1256{
1257	struct netdev_xdp xdp_op = {};
1258	struct nlattr *xdp;
1259	int err;
1260
1261	if (!dev->netdev_ops->ndo_xdp)
1262		return 0;
1263	xdp = nla_nest_start(skb, IFLA_XDP);
1264	if (!xdp)
1265		return -EMSGSIZE;
1266	xdp_op.command = XDP_QUERY_PROG;
1267	err = dev->netdev_ops->ndo_xdp(dev, &xdp_op);
1268	if (err)
1269		goto err_cancel;
1270	err = nla_put_u8(skb, IFLA_XDP_ATTACHED, xdp_op.prog_attached);
1271	if (err)
1272		goto err_cancel;
1273
1274	nla_nest_end(skb, xdp);
1275	return 0;
1276
1277err_cancel:
1278	nla_nest_cancel(skb, xdp);
1279	return err;
1280}
1281
1282static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
1283			    int type, u32 pid, u32 seq, u32 change,
1284			    unsigned int flags, u32 ext_filter_mask)
1285{
1286	struct ifinfomsg *ifm;
1287	struct nlmsghdr *nlh;
1288	struct nlattr *af_spec;
 
 
1289	struct rtnl_af_ops *af_ops;
1290	struct net_device *upper_dev = netdev_master_upper_dev_get(dev);
1291
1292	ASSERT_RTNL();
1293	nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ifm), flags);
1294	if (nlh == NULL)
1295		return -EMSGSIZE;
1296
1297	ifm = nlmsg_data(nlh);
1298	ifm->ifi_family = AF_UNSPEC;
1299	ifm->__ifi_pad = 0;
1300	ifm->ifi_type = dev->type;
1301	ifm->ifi_index = dev->ifindex;
1302	ifm->ifi_flags = dev_get_flags(dev);
1303	ifm->ifi_change = change;
1304
1305	if (nla_put_string(skb, IFLA_IFNAME, dev->name) ||
1306	    nla_put_u32(skb, IFLA_TXQLEN, dev->tx_queue_len) ||
1307	    nla_put_u8(skb, IFLA_OPERSTATE,
1308		       netif_running(dev) ? dev->operstate : IF_OPER_DOWN) ||
1309	    nla_put_u8(skb, IFLA_LINKMODE, dev->link_mode) ||
1310	    nla_put_u32(skb, IFLA_MTU, dev->mtu) ||
1311	    nla_put_u32(skb, IFLA_GROUP, dev->group) ||
1312	    nla_put_u32(skb, IFLA_PROMISCUITY, dev->promiscuity) ||
1313	    nla_put_u32(skb, IFLA_NUM_TX_QUEUES, dev->num_tx_queues) ||
1314	    nla_put_u32(skb, IFLA_GSO_MAX_SEGS, dev->gso_max_segs) ||
1315	    nla_put_u32(skb, IFLA_GSO_MAX_SIZE, dev->gso_max_size) ||
1316#ifdef CONFIG_RPS
1317	    nla_put_u32(skb, IFLA_NUM_RX_QUEUES, dev->num_rx_queues) ||
1318#endif
1319	    (dev->ifindex != dev_get_iflink(dev) &&
1320	     nla_put_u32(skb, IFLA_LINK, dev_get_iflink(dev))) ||
1321	    (upper_dev &&
1322	     nla_put_u32(skb, IFLA_MASTER, upper_dev->ifindex)) ||
1323	    nla_put_u8(skb, IFLA_CARRIER, netif_carrier_ok(dev)) ||
1324	    (dev->qdisc &&
1325	     nla_put_string(skb, IFLA_QDISC, dev->qdisc->ops->id)) ||
1326	    (dev->ifalias &&
1327	     nla_put_string(skb, IFLA_IFALIAS, dev->ifalias)) ||
1328	    nla_put_u32(skb, IFLA_CARRIER_CHANGES,
1329			atomic_read(&dev->carrier_changes)) ||
1330	    nla_put_u8(skb, IFLA_PROTO_DOWN, dev->proto_down))
1331		goto nla_put_failure;
1332
1333	if (rtnl_fill_link_ifmap(skb, dev))
1334		goto nla_put_failure;
 
 
 
 
 
 
 
 
 
1335
1336	if (dev->addr_len) {
1337		if (nla_put(skb, IFLA_ADDRESS, dev->addr_len, dev->dev_addr) ||
1338		    nla_put(skb, IFLA_BROADCAST, dev->addr_len, dev->broadcast))
1339			goto nla_put_failure;
1340	}
1341
1342	if (rtnl_phys_port_id_fill(skb, dev))
 
 
1343		goto nla_put_failure;
1344
1345	if (rtnl_phys_port_name_fill(skb, dev))
1346		goto nla_put_failure;
1347
1348	if (rtnl_phys_switch_id_fill(skb, dev))
 
 
1349		goto nla_put_failure;
 
1350
1351	if (rtnl_fill_stats(skb, dev))
1352		goto nla_put_failure;
1353
1354	if (dev->dev.parent && (ext_filter_mask & RTEXT_FILTER_VF) &&
1355	    nla_put_u32(skb, IFLA_NUM_VF, dev_num_vf(dev->dev.parent)))
1356		goto nla_put_failure;
1357
1358	if (dev->netdev_ops->ndo_get_vf_config && dev->dev.parent &&
1359	    ext_filter_mask & RTEXT_FILTER_VF) {
1360		int i;
1361		struct nlattr *vfinfo;
1362		int num_vfs = dev_num_vf(dev->dev.parent);
1363
1364		vfinfo = nla_nest_start(skb, IFLA_VFINFO_LIST);
1365		if (!vfinfo)
1366			goto nla_put_failure;
1367		for (i = 0; i < num_vfs; i++) {
1368			if (rtnl_fill_vfinfo(skb, dev, i, vfinfo))
 
 
 
 
 
 
 
 
 
 
 
 
 
1369				goto nla_put_failure;
 
 
 
 
 
1370		}
1371
1372		nla_nest_end(skb, vfinfo);
1373	}
1374
1375	if (rtnl_port_fill(skb, dev, ext_filter_mask))
1376		goto nla_put_failure;
1377
1378	if (rtnl_xdp_fill(skb, dev))
1379		goto nla_put_failure;
1380
1381	if (dev->rtnl_link_ops || rtnl_have_link_slave_info(dev)) {
1382		if (rtnl_link_fill(skb, dev) < 0)
1383			goto nla_put_failure;
1384	}
1385
1386	if (dev->rtnl_link_ops &&
1387	    dev->rtnl_link_ops->get_link_net) {
1388		struct net *link_net = dev->rtnl_link_ops->get_link_net(dev);
1389
1390		if (!net_eq(dev_net(dev), link_net)) {
1391			int id = peernet2id_alloc(dev_net(dev), link_net);
1392
1393			if (nla_put_s32(skb, IFLA_LINK_NETNSID, id))
1394				goto nla_put_failure;
1395		}
1396	}
1397
1398	if (!(af_spec = nla_nest_start(skb, IFLA_AF_SPEC)))
1399		goto nla_put_failure;
1400
1401	list_for_each_entry(af_ops, &rtnl_af_ops, list) {
1402		if (af_ops->fill_link_af) {
1403			struct nlattr *af;
1404			int err;
1405
1406			if (!(af = nla_nest_start(skb, af_ops->family)))
1407				goto nla_put_failure;
1408
1409			err = af_ops->fill_link_af(skb, dev, ext_filter_mask);
1410
1411			/*
1412			 * Caller may return ENODATA to indicate that there
1413			 * was no data to be dumped. This is not an error, it
1414			 * means we should trim the attribute header and
1415			 * continue.
1416			 */
1417			if (err == -ENODATA)
1418				nla_nest_cancel(skb, af);
1419			else if (err < 0)
1420				goto nla_put_failure;
1421
1422			nla_nest_end(skb, af);
1423		}
1424	}
1425
1426	nla_nest_end(skb, af_spec);
1427
1428	nlmsg_end(skb, nlh);
1429	return 0;
1430
1431nla_put_failure:
1432	nlmsg_cancel(skb, nlh);
1433	return -EMSGSIZE;
1434}
1435
1436static const struct nla_policy ifla_policy[IFLA_MAX+1] = {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1437	[IFLA_IFNAME]		= { .type = NLA_STRING, .len = IFNAMSIZ-1 },
1438	[IFLA_ADDRESS]		= { .type = NLA_BINARY, .len = MAX_ADDR_LEN },
1439	[IFLA_BROADCAST]	= { .type = NLA_BINARY, .len = MAX_ADDR_LEN },
1440	[IFLA_MAP]		= { .len = sizeof(struct rtnl_link_ifmap) },
1441	[IFLA_MTU]		= { .type = NLA_U32 },
1442	[IFLA_LINK]		= { .type = NLA_U32 },
1443	[IFLA_MASTER]		= { .type = NLA_U32 },
1444	[IFLA_CARRIER]		= { .type = NLA_U8 },
1445	[IFLA_TXQLEN]		= { .type = NLA_U32 },
1446	[IFLA_WEIGHT]		= { .type = NLA_U32 },
1447	[IFLA_OPERSTATE]	= { .type = NLA_U8 },
1448	[IFLA_LINKMODE]		= { .type = NLA_U8 },
1449	[IFLA_LINKINFO]		= { .type = NLA_NESTED },
1450	[IFLA_NET_NS_PID]	= { .type = NLA_U32 },
1451	[IFLA_NET_NS_FD]	= { .type = NLA_U32 },
1452	[IFLA_IFALIAS]	        = { .type = NLA_STRING, .len = IFALIASZ-1 },
1453	[IFLA_VFINFO_LIST]	= {. type = NLA_NESTED },
1454	[IFLA_VF_PORTS]		= { .type = NLA_NESTED },
1455	[IFLA_PORT_SELF]	= { .type = NLA_NESTED },
1456	[IFLA_AF_SPEC]		= { .type = NLA_NESTED },
1457	[IFLA_EXT_MASK]		= { .type = NLA_U32 },
1458	[IFLA_PROMISCUITY]	= { .type = NLA_U32 },
1459	[IFLA_NUM_TX_QUEUES]	= { .type = NLA_U32 },
1460	[IFLA_NUM_RX_QUEUES]	= { .type = NLA_U32 },
1461	[IFLA_PHYS_PORT_ID]	= { .type = NLA_BINARY, .len = MAX_PHYS_ITEM_ID_LEN },
1462	[IFLA_CARRIER_CHANGES]	= { .type = NLA_U32 },  /* ignored */
1463	[IFLA_PHYS_SWITCH_ID]	= { .type = NLA_BINARY, .len = MAX_PHYS_ITEM_ID_LEN },
1464	[IFLA_LINK_NETNSID]	= { .type = NLA_S32 },
1465	[IFLA_PROTO_DOWN]	= { .type = NLA_U8 },
1466	[IFLA_XDP]		= { .type = NLA_NESTED },
1467};
 
1468
1469static const struct nla_policy ifla_info_policy[IFLA_INFO_MAX+1] = {
1470	[IFLA_INFO_KIND]	= { .type = NLA_STRING },
1471	[IFLA_INFO_DATA]	= { .type = NLA_NESTED },
1472	[IFLA_INFO_SLAVE_KIND]	= { .type = NLA_STRING },
1473	[IFLA_INFO_SLAVE_DATA]	= { .type = NLA_NESTED },
 
 
1474};
1475
1476static const struct nla_policy ifla_vf_policy[IFLA_VF_MAX+1] = {
1477	[IFLA_VF_MAC]		= { .len = sizeof(struct ifla_vf_mac) },
1478	[IFLA_VF_VLAN]		= { .len = sizeof(struct ifla_vf_vlan) },
1479	[IFLA_VF_VLAN_LIST]     = { .type = NLA_NESTED },
1480	[IFLA_VF_TX_RATE]	= { .len = sizeof(struct ifla_vf_tx_rate) },
1481	[IFLA_VF_SPOOFCHK]	= { .len = sizeof(struct ifla_vf_spoofchk) },
1482	[IFLA_VF_RATE]		= { .len = sizeof(struct ifla_vf_rate) },
1483	[IFLA_VF_LINK_STATE]	= { .len = sizeof(struct ifla_vf_link_state) },
1484	[IFLA_VF_RSS_QUERY_EN]	= { .len = sizeof(struct ifla_vf_rss_query_en) },
1485	[IFLA_VF_STATS]		= { .type = NLA_NESTED },
1486	[IFLA_VF_TRUST]		= { .len = sizeof(struct ifla_vf_trust) },
1487	[IFLA_VF_IB_NODE_GUID]	= { .len = sizeof(struct ifla_vf_guid) },
1488	[IFLA_VF_IB_PORT_GUID]	= { .len = sizeof(struct ifla_vf_guid) },
1489};
1490
1491static const struct nla_policy ifla_port_policy[IFLA_PORT_MAX+1] = {
1492	[IFLA_PORT_VF]		= { .type = NLA_U32 },
1493	[IFLA_PORT_PROFILE]	= { .type = NLA_STRING,
1494				    .len = PORT_PROFILE_MAX },
1495	[IFLA_PORT_VSI_TYPE]	= { .type = NLA_BINARY,
1496				    .len = sizeof(struct ifla_port_vsi)},
1497	[IFLA_PORT_INSTANCE_UUID] = { .type = NLA_BINARY,
1498				      .len = PORT_UUID_MAX },
1499	[IFLA_PORT_HOST_UUID]	= { .type = NLA_STRING,
1500				    .len = PORT_UUID_MAX },
1501	[IFLA_PORT_REQUEST]	= { .type = NLA_U8, },
1502	[IFLA_PORT_RESPONSE]	= { .type = NLA_U16, },
1503};
1504
1505static const struct nla_policy ifla_xdp_policy[IFLA_XDP_MAX + 1] = {
1506	[IFLA_XDP_FD]		= { .type = NLA_S32 },
1507	[IFLA_XDP_ATTACHED]	= { .type = NLA_U8 },
1508	[IFLA_XDP_FLAGS]	= { .type = NLA_U32 },
1509};
1510
1511static const struct rtnl_link_ops *linkinfo_to_kind_ops(const struct nlattr *nla)
1512{
1513	const struct rtnl_link_ops *ops = NULL;
1514	struct nlattr *linfo[IFLA_INFO_MAX + 1];
1515
1516	if (nla_parse_nested(linfo, IFLA_INFO_MAX, nla, ifla_info_policy) < 0)
1517		return NULL;
1518
1519	if (linfo[IFLA_INFO_KIND]) {
1520		char kind[MODULE_NAME_LEN];
1521
1522		nla_strlcpy(kind, linfo[IFLA_INFO_KIND], sizeof(kind));
1523		ops = rtnl_link_ops_get(kind);
1524	}
1525
1526	return ops;
1527}
1528
1529static bool link_master_filtered(struct net_device *dev, int master_idx)
1530{
1531	struct net_device *master;
1532
1533	if (!master_idx)
1534		return false;
1535
1536	master = netdev_master_upper_dev_get(dev);
1537	if (!master || master->ifindex != master_idx)
1538		return true;
1539
1540	return false;
1541}
1542
1543static bool link_kind_filtered(const struct net_device *dev,
1544			       const struct rtnl_link_ops *kind_ops)
1545{
1546	if (kind_ops && dev->rtnl_link_ops != kind_ops)
1547		return true;
1548
1549	return false;
1550}
1551
1552static bool link_dump_filtered(struct net_device *dev,
1553			       int master_idx,
1554			       const struct rtnl_link_ops *kind_ops)
1555{
1556	if (link_master_filtered(dev, master_idx) ||
1557	    link_kind_filtered(dev, kind_ops))
1558		return true;
1559
1560	return false;
1561}
1562
1563static int rtnl_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb)
1564{
1565	struct net *net = sock_net(skb->sk);
1566	int h, s_h;
1567	int idx = 0, s_idx;
1568	struct net_device *dev;
1569	struct hlist_head *head;
1570	struct nlattr *tb[IFLA_MAX+1];
1571	u32 ext_filter_mask = 0;
1572	const struct rtnl_link_ops *kind_ops = NULL;
1573	unsigned int flags = NLM_F_MULTI;
1574	int master_idx = 0;
1575	int err;
1576	int hdrlen;
1577
1578	s_h = cb->args[0];
1579	s_idx = cb->args[1];
1580
1581	cb->seq = net->dev_base_seq;
1582
1583	/* A hack to preserve kernel<->userspace interface.
1584	 * The correct header is ifinfomsg. It is consistent with rtnl_getlink.
1585	 * However, before Linux v3.9 the code here assumed rtgenmsg and that's
1586	 * what iproute2 < v3.9.0 used.
1587	 * We can detect the old iproute2. Even including the IFLA_EXT_MASK
1588	 * attribute, its netlink message is shorter than struct ifinfomsg.
1589	 */
1590	hdrlen = nlmsg_len(cb->nlh) < sizeof(struct ifinfomsg) ?
1591		 sizeof(struct rtgenmsg) : sizeof(struct ifinfomsg);
1592
1593	if (nlmsg_parse(cb->nlh, hdrlen, tb, IFLA_MAX, ifla_policy) >= 0) {
1594
1595		if (tb[IFLA_EXT_MASK])
1596			ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]);
1597
1598		if (tb[IFLA_MASTER])
1599			master_idx = nla_get_u32(tb[IFLA_MASTER]);
1600
1601		if (tb[IFLA_LINKINFO])
1602			kind_ops = linkinfo_to_kind_ops(tb[IFLA_LINKINFO]);
1603
1604		if (master_idx || kind_ops)
1605			flags |= NLM_F_DUMP_FILTERED;
1606	}
1607
1608	for (h = s_h; h < NETDEV_HASHENTRIES; h++, s_idx = 0) {
1609		idx = 0;
1610		head = &net->dev_index_head[h];
1611		hlist_for_each_entry(dev, head, index_hlist) {
1612			if (link_dump_filtered(dev, master_idx, kind_ops))
1613				goto cont;
1614			if (idx < s_idx)
1615				goto cont;
1616			err = rtnl_fill_ifinfo(skb, dev, RTM_NEWLINK,
1617					       NETLINK_CB(cb->skb).portid,
1618					       cb->nlh->nlmsg_seq, 0,
1619					       flags,
1620					       ext_filter_mask);
1621			/* If we ran out of room on the first message,
1622			 * we're in trouble
1623			 */
1624			WARN_ON((err == -EMSGSIZE) && (skb->len == 0));
1625
1626			if (err < 0)
1627				goto out;
1628
1629			nl_dump_check_consistent(cb, nlmsg_hdr(skb));
1630cont:
1631			idx++;
1632		}
1633	}
1634out:
1635	cb->args[1] = idx;
1636	cb->args[0] = h;
1637
1638	return skb->len;
1639}
1640
1641int rtnl_nla_parse_ifla(struct nlattr **tb, const struct nlattr *head, int len)
1642{
1643	return nla_parse(tb, IFLA_MAX, head, len, ifla_policy);
1644}
1645EXPORT_SYMBOL(rtnl_nla_parse_ifla);
1646
1647struct net *rtnl_link_get_net(struct net *src_net, struct nlattr *tb[])
1648{
1649	struct net *net;
1650	/* Examine the link attributes and figure out which
1651	 * network namespace we are talking about.
1652	 */
1653	if (tb[IFLA_NET_NS_PID])
1654		net = get_net_ns_by_pid(nla_get_u32(tb[IFLA_NET_NS_PID]));
1655	else if (tb[IFLA_NET_NS_FD])
1656		net = get_net_ns_by_fd(nla_get_u32(tb[IFLA_NET_NS_FD]));
1657	else
1658		net = get_net(src_net);
1659	return net;
1660}
1661EXPORT_SYMBOL(rtnl_link_get_net);
1662
1663static int validate_linkmsg(struct net_device *dev, struct nlattr *tb[])
1664{
1665	if (dev) {
1666		if (tb[IFLA_ADDRESS] &&
1667		    nla_len(tb[IFLA_ADDRESS]) < dev->addr_len)
1668			return -EINVAL;
1669
1670		if (tb[IFLA_BROADCAST] &&
1671		    nla_len(tb[IFLA_BROADCAST]) < dev->addr_len)
1672			return -EINVAL;
1673	}
1674
1675	if (tb[IFLA_AF_SPEC]) {
1676		struct nlattr *af;
1677		int rem, err;
1678
1679		nla_for_each_nested(af, tb[IFLA_AF_SPEC], rem) {
1680			const struct rtnl_af_ops *af_ops;
1681
1682			if (!(af_ops = rtnl_af_lookup(nla_type(af))))
1683				return -EAFNOSUPPORT;
1684
1685			if (!af_ops->set_link_af)
1686				return -EOPNOTSUPP;
1687
1688			if (af_ops->validate_link_af) {
1689				err = af_ops->validate_link_af(dev, af);
1690				if (err < 0)
1691					return err;
1692			}
1693		}
1694	}
1695
1696	return 0;
1697}
1698
1699static int handle_infiniband_guid(struct net_device *dev, struct ifla_vf_guid *ivt,
1700				  int guid_type)
1701{
 
 
1702	const struct net_device_ops *ops = dev->netdev_ops;
1703
1704	return ops->ndo_set_vf_guid(dev, ivt->vf, ivt->guid, guid_type);
1705}
1706
1707static int handle_vf_guid(struct net_device *dev, struct ifla_vf_guid *ivt, int guid_type)
1708{
1709	if (dev->type != ARPHRD_INFINIBAND)
1710		return -EOPNOTSUPP;
1711
1712	return handle_infiniband_guid(dev, ivt, guid_type);
1713}
1714
1715static int do_setvfinfo(struct net_device *dev, struct nlattr **tb)
1716{
1717	const struct net_device_ops *ops = dev->netdev_ops;
1718	int err = -EINVAL;
1719
1720	if (tb[IFLA_VF_MAC]) {
1721		struct ifla_vf_mac *ivm = nla_data(tb[IFLA_VF_MAC]);
1722
1723		err = -EOPNOTSUPP;
1724		if (ops->ndo_set_vf_mac)
1725			err = ops->ndo_set_vf_mac(dev, ivm->vf,
1726						  ivm->mac);
1727		if (err < 0)
1728			return err;
1729	}
1730
1731	if (tb[IFLA_VF_VLAN]) {
1732		struct ifla_vf_vlan *ivv = nla_data(tb[IFLA_VF_VLAN]);
1733
1734		err = -EOPNOTSUPP;
1735		if (ops->ndo_set_vf_vlan)
1736			err = ops->ndo_set_vf_vlan(dev, ivv->vf, ivv->vlan,
1737						   ivv->qos,
1738						   htons(ETH_P_8021Q));
1739		if (err < 0)
1740			return err;
1741	}
1742
1743	if (tb[IFLA_VF_VLAN_LIST]) {
1744		struct ifla_vf_vlan_info *ivvl[MAX_VLAN_LIST_LEN];
1745		struct nlattr *attr;
1746		int rem, len = 0;
1747
1748		err = -EOPNOTSUPP;
1749		if (!ops->ndo_set_vf_vlan)
1750			return err;
1751
1752		nla_for_each_nested(attr, tb[IFLA_VF_VLAN_LIST], rem) {
1753			if (nla_type(attr) != IFLA_VF_VLAN_INFO ||
1754			    nla_len(attr) < NLA_HDRLEN) {
1755				return -EINVAL;
1756			}
1757			if (len >= MAX_VLAN_LIST_LEN)
1758				return -EOPNOTSUPP;
1759			ivvl[len] = nla_data(attr);
1760
1761			len++;
1762		}
1763		if (len == 0)
1764			return -EINVAL;
1765
1766		err = ops->ndo_set_vf_vlan(dev, ivvl[0]->vf, ivvl[0]->vlan,
1767					   ivvl[0]->qos, ivvl[0]->vlan_proto);
1768		if (err < 0)
1769			return err;
1770	}
1771
1772	if (tb[IFLA_VF_TX_RATE]) {
1773		struct ifla_vf_tx_rate *ivt = nla_data(tb[IFLA_VF_TX_RATE]);
1774		struct ifla_vf_info ivf;
1775
1776		err = -EOPNOTSUPP;
1777		if (ops->ndo_get_vf_config)
1778			err = ops->ndo_get_vf_config(dev, ivt->vf, &ivf);
1779		if (err < 0)
1780			return err;
1781
1782		err = -EOPNOTSUPP;
1783		if (ops->ndo_set_vf_rate)
1784			err = ops->ndo_set_vf_rate(dev, ivt->vf,
1785						   ivf.min_tx_rate,
1786						   ivt->rate);
1787		if (err < 0)
1788			return err;
1789	}
1790
1791	if (tb[IFLA_VF_RATE]) {
1792		struct ifla_vf_rate *ivt = nla_data(tb[IFLA_VF_RATE]);
1793
1794		err = -EOPNOTSUPP;
1795		if (ops->ndo_set_vf_rate)
1796			err = ops->ndo_set_vf_rate(dev, ivt->vf,
1797						   ivt->min_tx_rate,
1798						   ivt->max_tx_rate);
1799		if (err < 0)
1800			return err;
1801	}
1802
1803	if (tb[IFLA_VF_SPOOFCHK]) {
1804		struct ifla_vf_spoofchk *ivs = nla_data(tb[IFLA_VF_SPOOFCHK]);
1805
1806		err = -EOPNOTSUPP;
1807		if (ops->ndo_set_vf_spoofchk)
1808			err = ops->ndo_set_vf_spoofchk(dev, ivs->vf,
1809						       ivs->setting);
1810		if (err < 0)
1811			return err;
1812	}
1813
1814	if (tb[IFLA_VF_LINK_STATE]) {
1815		struct ifla_vf_link_state *ivl = nla_data(tb[IFLA_VF_LINK_STATE]);
1816
1817		err = -EOPNOTSUPP;
1818		if (ops->ndo_set_vf_link_state)
1819			err = ops->ndo_set_vf_link_state(dev, ivl->vf,
1820							 ivl->link_state);
1821		if (err < 0)
1822			return err;
1823	}
1824
1825	if (tb[IFLA_VF_RSS_QUERY_EN]) {
1826		struct ifla_vf_rss_query_en *ivrssq_en;
1827
1828		err = -EOPNOTSUPP;
1829		ivrssq_en = nla_data(tb[IFLA_VF_RSS_QUERY_EN]);
1830		if (ops->ndo_set_vf_rss_query_en)
1831			err = ops->ndo_set_vf_rss_query_en(dev, ivrssq_en->vf,
1832							   ivrssq_en->setting);
1833		if (err < 0)
1834			return err;
1835	}
1836
1837	if (tb[IFLA_VF_TRUST]) {
1838		struct ifla_vf_trust *ivt = nla_data(tb[IFLA_VF_TRUST]);
1839
1840		err = -EOPNOTSUPP;
1841		if (ops->ndo_set_vf_trust)
1842			err = ops->ndo_set_vf_trust(dev, ivt->vf, ivt->setting);
1843		if (err < 0)
1844			return err;
1845	}
1846
1847	if (tb[IFLA_VF_IB_NODE_GUID]) {
1848		struct ifla_vf_guid *ivt = nla_data(tb[IFLA_VF_IB_NODE_GUID]);
1849
1850		if (!ops->ndo_set_vf_guid)
1851			return -EOPNOTSUPP;
1852
1853		return handle_vf_guid(dev, ivt, IFLA_VF_IB_NODE_GUID);
1854	}
1855
1856	if (tb[IFLA_VF_IB_PORT_GUID]) {
1857		struct ifla_vf_guid *ivt = nla_data(tb[IFLA_VF_IB_PORT_GUID]);
1858
1859		if (!ops->ndo_set_vf_guid)
1860			return -EOPNOTSUPP;
1861
1862		return handle_vf_guid(dev, ivt, IFLA_VF_IB_PORT_GUID);
1863	}
1864
1865	return err;
1866}
1867
1868static int do_set_master(struct net_device *dev, int ifindex)
1869{
1870	struct net_device *upper_dev = netdev_master_upper_dev_get(dev);
1871	const struct net_device_ops *ops;
1872	int err;
1873
1874	if (upper_dev) {
1875		if (upper_dev->ifindex == ifindex)
1876			return 0;
1877		ops = upper_dev->netdev_ops;
1878		if (ops->ndo_del_slave) {
1879			err = ops->ndo_del_slave(upper_dev, dev);
1880			if (err)
1881				return err;
1882		} else {
1883			return -EOPNOTSUPP;
1884		}
1885	}
1886
1887	if (ifindex) {
1888		upper_dev = __dev_get_by_index(dev_net(dev), ifindex);
1889		if (!upper_dev)
1890			return -EINVAL;
1891		ops = upper_dev->netdev_ops;
1892		if (ops->ndo_add_slave) {
1893			err = ops->ndo_add_slave(upper_dev, dev);
1894			if (err)
1895				return err;
1896		} else {
1897			return -EOPNOTSUPP;
1898		}
1899	}
1900	return 0;
1901}
1902
1903#define DO_SETLINK_MODIFIED	0x01
1904/* notify flag means notify + modified. */
1905#define DO_SETLINK_NOTIFY	0x03
1906static int do_setlink(const struct sk_buff *skb,
1907		      struct net_device *dev, struct ifinfomsg *ifm,
1908		      struct nlattr **tb, char *ifname, int status)
1909{
1910	const struct net_device_ops *ops = dev->netdev_ops;
 
1911	int err;
1912
1913	if (tb[IFLA_NET_NS_PID] || tb[IFLA_NET_NS_FD]) {
1914		struct net *net = rtnl_link_get_net(dev_net(dev), tb);
1915		if (IS_ERR(net)) {
1916			err = PTR_ERR(net);
1917			goto errout;
1918		}
1919		if (!netlink_ns_capable(skb, net->user_ns, CAP_NET_ADMIN)) {
1920			put_net(net);
1921			err = -EPERM;
1922			goto errout;
1923		}
1924		err = dev_change_net_namespace(dev, net, ifname);
1925		put_net(net);
1926		if (err)
1927			goto errout;
1928		status |= DO_SETLINK_MODIFIED;
1929	}
1930
1931	if (tb[IFLA_MAP]) {
1932		struct rtnl_link_ifmap *u_map;
1933		struct ifmap k_map;
1934
1935		if (!ops->ndo_set_config) {
1936			err = -EOPNOTSUPP;
1937			goto errout;
1938		}
1939
1940		if (!netif_device_present(dev)) {
1941			err = -ENODEV;
1942			goto errout;
1943		}
1944
1945		u_map = nla_data(tb[IFLA_MAP]);
1946		k_map.mem_start = (unsigned long) u_map->mem_start;
1947		k_map.mem_end = (unsigned long) u_map->mem_end;
1948		k_map.base_addr = (unsigned short) u_map->base_addr;
1949		k_map.irq = (unsigned char) u_map->irq;
1950		k_map.dma = (unsigned char) u_map->dma;
1951		k_map.port = (unsigned char) u_map->port;
1952
1953		err = ops->ndo_set_config(dev, &k_map);
1954		if (err < 0)
1955			goto errout;
1956
1957		status |= DO_SETLINK_NOTIFY;
1958	}
1959
1960	if (tb[IFLA_ADDRESS]) {
1961		struct sockaddr *sa;
1962		int len;
1963
 
 
 
 
 
 
 
 
 
 
1964		len = sizeof(sa_family_t) + dev->addr_len;
1965		sa = kmalloc(len, GFP_KERNEL);
1966		if (!sa) {
1967			err = -ENOMEM;
1968			goto errout;
1969		}
1970		sa->sa_family = dev->type;
1971		memcpy(sa->sa_data, nla_data(tb[IFLA_ADDRESS]),
1972		       dev->addr_len);
1973		err = dev_set_mac_address(dev, sa);
1974		kfree(sa);
1975		if (err)
1976			goto errout;
1977		status |= DO_SETLINK_MODIFIED;
 
1978	}
1979
1980	if (tb[IFLA_MTU]) {
1981		err = dev_set_mtu(dev, nla_get_u32(tb[IFLA_MTU]));
1982		if (err < 0)
1983			goto errout;
1984		status |= DO_SETLINK_MODIFIED;
1985	}
1986
1987	if (tb[IFLA_GROUP]) {
1988		dev_set_group(dev, nla_get_u32(tb[IFLA_GROUP]));
1989		status |= DO_SETLINK_NOTIFY;
1990	}
1991
1992	/*
1993	 * Interface selected by interface index but interface
1994	 * name provided implies that a name change has been
1995	 * requested.
1996	 */
1997	if (ifm->ifi_index > 0 && ifname[0]) {
1998		err = dev_change_name(dev, ifname);
1999		if (err < 0)
2000			goto errout;
2001		status |= DO_SETLINK_MODIFIED;
2002	}
2003
2004	if (tb[IFLA_IFALIAS]) {
2005		err = dev_set_alias(dev, nla_data(tb[IFLA_IFALIAS]),
2006				    nla_len(tb[IFLA_IFALIAS]));
2007		if (err < 0)
2008			goto errout;
2009		status |= DO_SETLINK_NOTIFY;
2010	}
2011
2012	if (tb[IFLA_BROADCAST]) {
2013		nla_memcpy(dev->broadcast, tb[IFLA_BROADCAST], dev->addr_len);
2014		call_netdevice_notifiers(NETDEV_CHANGEADDR, dev);
2015	}
2016
2017	if (ifm->ifi_flags || ifm->ifi_change) {
2018		err = dev_change_flags(dev, rtnl_dev_combine_flags(dev, ifm));
2019		if (err < 0)
2020			goto errout;
2021	}
2022
2023	if (tb[IFLA_MASTER]) {
2024		err = do_set_master(dev, nla_get_u32(tb[IFLA_MASTER]));
2025		if (err)
2026			goto errout;
2027		status |= DO_SETLINK_MODIFIED;
2028	}
2029
2030	if (tb[IFLA_CARRIER]) {
2031		err = dev_change_carrier(dev, nla_get_u8(tb[IFLA_CARRIER]));
2032		if (err)
2033			goto errout;
2034		status |= DO_SETLINK_MODIFIED;
2035	}
2036
2037	if (tb[IFLA_TXQLEN]) {
2038		unsigned long value = nla_get_u32(tb[IFLA_TXQLEN]);
2039		unsigned long orig_len = dev->tx_queue_len;
2040
2041		if (dev->tx_queue_len ^ value) {
2042			dev->tx_queue_len = value;
2043			err = call_netdevice_notifiers(
2044			      NETDEV_CHANGE_TX_QUEUE_LEN, dev);
2045			err = notifier_to_errno(err);
2046			if (err) {
2047				dev->tx_queue_len = orig_len;
2048				goto errout;
2049			}
2050			status |= DO_SETLINK_NOTIFY;
2051		}
2052	}
2053
2054	if (tb[IFLA_OPERSTATE])
2055		set_operstate(dev, nla_get_u8(tb[IFLA_OPERSTATE]));
2056
2057	if (tb[IFLA_LINKMODE]) {
2058		unsigned char value = nla_get_u8(tb[IFLA_LINKMODE]);
2059
2060		write_lock_bh(&dev_base_lock);
2061		if (dev->link_mode ^ value)
2062			status |= DO_SETLINK_NOTIFY;
2063		dev->link_mode = value;
2064		write_unlock_bh(&dev_base_lock);
2065	}
2066
2067	if (tb[IFLA_VFINFO_LIST]) {
2068		struct nlattr *vfinfo[IFLA_VF_MAX + 1];
2069		struct nlattr *attr;
2070		int rem;
2071
2072		nla_for_each_nested(attr, tb[IFLA_VFINFO_LIST], rem) {
2073			if (nla_type(attr) != IFLA_VF_INFO ||
2074			    nla_len(attr) < NLA_HDRLEN) {
2075				err = -EINVAL;
2076				goto errout;
2077			}
2078			err = nla_parse_nested(vfinfo, IFLA_VF_MAX, attr,
2079					       ifla_vf_policy);
2080			if (err < 0)
2081				goto errout;
2082			err = do_setvfinfo(dev, vfinfo);
2083			if (err < 0)
2084				goto errout;
2085			status |= DO_SETLINK_NOTIFY;
2086		}
2087	}
2088	err = 0;
2089
2090	if (tb[IFLA_VF_PORTS]) {
2091		struct nlattr *port[IFLA_PORT_MAX+1];
2092		struct nlattr *attr;
2093		int vf;
2094		int rem;
2095
2096		err = -EOPNOTSUPP;
2097		if (!ops->ndo_set_vf_port)
2098			goto errout;
2099
2100		nla_for_each_nested(attr, tb[IFLA_VF_PORTS], rem) {
2101			if (nla_type(attr) != IFLA_VF_PORT ||
2102			    nla_len(attr) < NLA_HDRLEN) {
2103				err = -EINVAL;
2104				goto errout;
2105			}
2106			err = nla_parse_nested(port, IFLA_PORT_MAX, attr,
2107					       ifla_port_policy);
2108			if (err < 0)
2109				goto errout;
2110			if (!port[IFLA_PORT_VF]) {
2111				err = -EOPNOTSUPP;
2112				goto errout;
2113			}
2114			vf = nla_get_u32(port[IFLA_PORT_VF]);
2115			err = ops->ndo_set_vf_port(dev, vf, port);
2116			if (err < 0)
2117				goto errout;
2118			status |= DO_SETLINK_NOTIFY;
2119		}
2120	}
2121	err = 0;
2122
2123	if (tb[IFLA_PORT_SELF]) {
2124		struct nlattr *port[IFLA_PORT_MAX+1];
2125
2126		err = nla_parse_nested(port, IFLA_PORT_MAX,
2127			tb[IFLA_PORT_SELF], ifla_port_policy);
2128		if (err < 0)
2129			goto errout;
2130
2131		err = -EOPNOTSUPP;
2132		if (ops->ndo_set_vf_port)
2133			err = ops->ndo_set_vf_port(dev, PORT_SELF_VF, port);
2134		if (err < 0)
2135			goto errout;
2136		status |= DO_SETLINK_NOTIFY;
2137	}
2138
2139	if (tb[IFLA_AF_SPEC]) {
2140		struct nlattr *af;
2141		int rem;
2142
2143		nla_for_each_nested(af, tb[IFLA_AF_SPEC], rem) {
2144			const struct rtnl_af_ops *af_ops;
2145
2146			if (!(af_ops = rtnl_af_lookup(nla_type(af))))
2147				BUG();
2148
2149			err = af_ops->set_link_af(dev, af);
2150			if (err < 0)
2151				goto errout;
2152
2153			status |= DO_SETLINK_NOTIFY;
2154		}
2155	}
2156	err = 0;
2157
2158	if (tb[IFLA_PROTO_DOWN]) {
2159		err = dev_change_proto_down(dev,
2160					    nla_get_u8(tb[IFLA_PROTO_DOWN]));
2161		if (err)
2162			goto errout;
2163		status |= DO_SETLINK_NOTIFY;
2164	}
2165
2166	if (tb[IFLA_XDP]) {
2167		struct nlattr *xdp[IFLA_XDP_MAX + 1];
2168		u32 xdp_flags = 0;
2169
2170		err = nla_parse_nested(xdp, IFLA_XDP_MAX, tb[IFLA_XDP],
2171				       ifla_xdp_policy);
2172		if (err < 0)
2173			goto errout;
2174
2175		if (xdp[IFLA_XDP_ATTACHED]) {
2176			err = -EINVAL;
2177			goto errout;
2178		}
2179
2180		if (xdp[IFLA_XDP_FLAGS]) {
2181			xdp_flags = nla_get_u32(xdp[IFLA_XDP_FLAGS]);
2182			if (xdp_flags & ~XDP_FLAGS_MASK) {
2183				err = -EINVAL;
2184				goto errout;
2185			}
2186		}
2187
2188		if (xdp[IFLA_XDP_FD]) {
2189			err = dev_change_xdp_fd(dev,
2190						nla_get_s32(xdp[IFLA_XDP_FD]),
2191						xdp_flags);
2192			if (err)
2193				goto errout;
2194			status |= DO_SETLINK_NOTIFY;
2195		}
2196	}
2197
2198errout:
2199	if (status & DO_SETLINK_MODIFIED) {
2200		if (status & DO_SETLINK_NOTIFY)
2201			netdev_state_change(dev);
2202
2203		if (err < 0)
2204			net_warn_ratelimited("A link change request failed with some changes committed already. Interface %s may have been left with an inconsistent configuration, please check.\n",
2205					     dev->name);
2206	}
2207
 
 
2208	return err;
2209}
2210
2211static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh)
2212{
2213	struct net *net = sock_net(skb->sk);
2214	struct ifinfomsg *ifm;
2215	struct net_device *dev;
2216	int err;
2217	struct nlattr *tb[IFLA_MAX+1];
2218	char ifname[IFNAMSIZ];
2219
2220	err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy);
2221	if (err < 0)
2222		goto errout;
2223
2224	if (tb[IFLA_IFNAME])
2225		nla_strlcpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
2226	else
2227		ifname[0] = '\0';
2228
2229	err = -EINVAL;
2230	ifm = nlmsg_data(nlh);
2231	if (ifm->ifi_index > 0)
2232		dev = __dev_get_by_index(net, ifm->ifi_index);
2233	else if (tb[IFLA_IFNAME])
2234		dev = __dev_get_by_name(net, ifname);
2235	else
2236		goto errout;
2237
2238	if (dev == NULL) {
2239		err = -ENODEV;
2240		goto errout;
2241	}
2242
2243	err = validate_linkmsg(dev, tb);
2244	if (err < 0)
2245		goto errout;
2246
2247	err = do_setlink(skb, dev, ifm, tb, ifname, 0);
2248errout:
2249	return err;
2250}
2251
2252static int rtnl_group_dellink(const struct net *net, int group)
2253{
2254	struct net_device *dev, *aux;
2255	LIST_HEAD(list_kill);
2256	bool found = false;
2257
2258	if (!group)
2259		return -EPERM;
2260
2261	for_each_netdev(net, dev) {
2262		if (dev->group == group) {
2263			const struct rtnl_link_ops *ops;
2264
2265			found = true;
2266			ops = dev->rtnl_link_ops;
2267			if (!ops || !ops->dellink)
2268				return -EOPNOTSUPP;
2269		}
2270	}
2271
2272	if (!found)
2273		return -ENODEV;
2274
2275	for_each_netdev_safe(net, dev, aux) {
2276		if (dev->group == group) {
2277			const struct rtnl_link_ops *ops;
2278
2279			ops = dev->rtnl_link_ops;
2280			ops->dellink(dev, &list_kill);
2281		}
2282	}
2283	unregister_netdevice_many(&list_kill);
2284
2285	return 0;
2286}
2287
2288int rtnl_delete_link(struct net_device *dev)
2289{
 
2290	const struct rtnl_link_ops *ops;
2291	LIST_HEAD(list_kill);
2292
2293	ops = dev->rtnl_link_ops;
2294	if (!ops || !ops->dellink)
2295		return -EOPNOTSUPP;
2296
2297	ops->dellink(dev, &list_kill);
2298	unregister_netdevice_many(&list_kill);
2299
2300	return 0;
2301}
2302EXPORT_SYMBOL_GPL(rtnl_delete_link);
2303
2304static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh)
2305{
2306	struct net *net = sock_net(skb->sk);
2307	struct net_device *dev;
2308	struct ifinfomsg *ifm;
2309	char ifname[IFNAMSIZ];
2310	struct nlattr *tb[IFLA_MAX+1];
2311	int err;
 
2312
2313	err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy);
2314	if (err < 0)
2315		return err;
2316
2317	if (tb[IFLA_IFNAME])
2318		nla_strlcpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
2319
2320	ifm = nlmsg_data(nlh);
2321	if (ifm->ifi_index > 0)
2322		dev = __dev_get_by_index(net, ifm->ifi_index);
2323	else if (tb[IFLA_IFNAME])
2324		dev = __dev_get_by_name(net, ifname);
2325	else if (tb[IFLA_GROUP])
2326		return rtnl_group_dellink(net, nla_get_u32(tb[IFLA_GROUP]));
2327	else
2328		return -EINVAL;
2329
2330	if (!dev)
2331		return -ENODEV;
2332
2333	return rtnl_delete_link(dev);
 
 
 
 
 
 
 
2334}
2335
2336int rtnl_configure_link(struct net_device *dev, const struct ifinfomsg *ifm)
2337{
2338	unsigned int old_flags;
2339	int err;
2340
2341	old_flags = dev->flags;
2342	if (ifm && (ifm->ifi_flags || ifm->ifi_change)) {
2343		err = __dev_change_flags(dev, rtnl_dev_combine_flags(dev, ifm));
2344		if (err < 0)
2345			return err;
2346	}
2347
2348	dev->rtnl_link_state = RTNL_LINK_INITIALIZED;
 
2349
2350	__dev_notify_flags(dev, old_flags, ~0U);
2351	return 0;
2352}
2353EXPORT_SYMBOL(rtnl_configure_link);
2354
2355struct net_device *rtnl_create_link(struct net *net,
2356	const char *ifname, unsigned char name_assign_type,
2357	const struct rtnl_link_ops *ops, struct nlattr *tb[])
2358{
2359	int err;
2360	struct net_device *dev;
2361	unsigned int num_tx_queues = 1;
2362	unsigned int num_rx_queues = 1;
2363
2364	if (tb[IFLA_NUM_TX_QUEUES])
2365		num_tx_queues = nla_get_u32(tb[IFLA_NUM_TX_QUEUES]);
2366	else if (ops->get_num_tx_queues)
2367		num_tx_queues = ops->get_num_tx_queues();
2368
2369	if (tb[IFLA_NUM_RX_QUEUES])
2370		num_rx_queues = nla_get_u32(tb[IFLA_NUM_RX_QUEUES]);
2371	else if (ops->get_num_rx_queues)
2372		num_rx_queues = ops->get_num_rx_queues();
2373
 
 
 
 
 
 
2374	err = -ENOMEM;
2375	dev = alloc_netdev_mqs(ops->priv_size, ifname, name_assign_type,
2376			       ops->setup, num_tx_queues, num_rx_queues);
2377	if (!dev)
2378		goto err;
2379
2380	dev_net_set(dev, net);
2381	dev->rtnl_link_ops = ops;
2382	dev->rtnl_link_state = RTNL_LINK_INITIALIZING;
 
2383
2384	if (tb[IFLA_MTU])
2385		dev->mtu = nla_get_u32(tb[IFLA_MTU]);
2386	if (tb[IFLA_ADDRESS]) {
2387		memcpy(dev->dev_addr, nla_data(tb[IFLA_ADDRESS]),
2388				nla_len(tb[IFLA_ADDRESS]));
2389		dev->addr_assign_type = NET_ADDR_SET;
2390	}
2391	if (tb[IFLA_BROADCAST])
2392		memcpy(dev->broadcast, nla_data(tb[IFLA_BROADCAST]),
2393				nla_len(tb[IFLA_BROADCAST]));
2394	if (tb[IFLA_TXQLEN])
2395		dev->tx_queue_len = nla_get_u32(tb[IFLA_TXQLEN]);
2396	if (tb[IFLA_OPERSTATE])
2397		set_operstate(dev, nla_get_u8(tb[IFLA_OPERSTATE]));
2398	if (tb[IFLA_LINKMODE])
2399		dev->link_mode = nla_get_u8(tb[IFLA_LINKMODE]);
2400	if (tb[IFLA_GROUP])
2401		dev_set_group(dev, nla_get_u32(tb[IFLA_GROUP]));
2402
2403	return dev;
2404
2405err:
2406	return ERR_PTR(err);
2407}
2408EXPORT_SYMBOL(rtnl_create_link);
2409
2410static int rtnl_group_changelink(const struct sk_buff *skb,
2411		struct net *net, int group,
2412		struct ifinfomsg *ifm,
2413		struct nlattr **tb)
2414{
2415	struct net_device *dev, *aux;
2416	int err;
2417
2418	for_each_netdev_safe(net, dev, aux) {
2419		if (dev->group == group) {
2420			err = do_setlink(skb, dev, ifm, tb, NULL, 0);
2421			if (err < 0)
2422				return err;
2423		}
2424	}
2425
2426	return 0;
2427}
2428
2429static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh)
2430{
2431	struct net *net = sock_net(skb->sk);
2432	const struct rtnl_link_ops *ops;
2433	const struct rtnl_link_ops *m_ops = NULL;
2434	struct net_device *dev;
2435	struct net_device *master_dev = NULL;
2436	struct ifinfomsg *ifm;
2437	char kind[MODULE_NAME_LEN];
2438	char ifname[IFNAMSIZ];
2439	struct nlattr *tb[IFLA_MAX+1];
2440	struct nlattr *linkinfo[IFLA_INFO_MAX+1];
2441	unsigned char name_assign_type = NET_NAME_USER;
2442	int err;
2443
2444#ifdef CONFIG_MODULES
2445replay:
2446#endif
2447	err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy);
2448	if (err < 0)
2449		return err;
2450
2451	if (tb[IFLA_IFNAME])
2452		nla_strlcpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
2453	else
2454		ifname[0] = '\0';
2455
2456	ifm = nlmsg_data(nlh);
2457	if (ifm->ifi_index > 0)
2458		dev = __dev_get_by_index(net, ifm->ifi_index);
2459	else {
2460		if (ifname[0])
2461			dev = __dev_get_by_name(net, ifname);
2462		else
2463			dev = NULL;
2464	}
2465
2466	if (dev) {
2467		master_dev = netdev_master_upper_dev_get(dev);
2468		if (master_dev)
2469			m_ops = master_dev->rtnl_link_ops;
2470	}
2471
2472	err = validate_linkmsg(dev, tb);
2473	if (err < 0)
2474		return err;
2475
2476	if (tb[IFLA_LINKINFO]) {
2477		err = nla_parse_nested(linkinfo, IFLA_INFO_MAX,
2478				       tb[IFLA_LINKINFO], ifla_info_policy);
2479		if (err < 0)
2480			return err;
2481	} else
2482		memset(linkinfo, 0, sizeof(linkinfo));
2483
2484	if (linkinfo[IFLA_INFO_KIND]) {
2485		nla_strlcpy(kind, linkinfo[IFLA_INFO_KIND], sizeof(kind));
2486		ops = rtnl_link_ops_get(kind);
2487	} else {
2488		kind[0] = '\0';
2489		ops = NULL;
2490	}
2491
2492	if (1) {
2493		struct nlattr *attr[ops ? ops->maxtype + 1 : 1];
2494		struct nlattr *slave_attr[m_ops ? m_ops->slave_maxtype + 1 : 1];
2495		struct nlattr **data = NULL;
2496		struct nlattr **slave_data = NULL;
2497		struct net *dest_net, *link_net = NULL;
2498
2499		if (ops) {
2500			if (ops->maxtype && linkinfo[IFLA_INFO_DATA]) {
2501				err = nla_parse_nested(attr, ops->maxtype,
2502						       linkinfo[IFLA_INFO_DATA],
2503						       ops->policy);
2504				if (err < 0)
2505					return err;
2506				data = attr;
2507			}
2508			if (ops->validate) {
2509				err = ops->validate(tb, data);
2510				if (err < 0)
2511					return err;
2512			}
2513		}
2514
2515		if (m_ops) {
2516			if (m_ops->slave_maxtype &&
2517			    linkinfo[IFLA_INFO_SLAVE_DATA]) {
2518				err = nla_parse_nested(slave_attr,
2519						       m_ops->slave_maxtype,
2520						       linkinfo[IFLA_INFO_SLAVE_DATA],
2521						       m_ops->slave_policy);
2522				if (err < 0)
2523					return err;
2524				slave_data = slave_attr;
2525			}
2526			if (m_ops->slave_validate) {
2527				err = m_ops->slave_validate(tb, slave_data);
2528				if (err < 0)
2529					return err;
2530			}
2531		}
2532
2533		if (dev) {
2534			int status = 0;
2535
2536			if (nlh->nlmsg_flags & NLM_F_EXCL)
2537				return -EEXIST;
2538			if (nlh->nlmsg_flags & NLM_F_REPLACE)
2539				return -EOPNOTSUPP;
2540
2541			if (linkinfo[IFLA_INFO_DATA]) {
2542				if (!ops || ops != dev->rtnl_link_ops ||
2543				    !ops->changelink)
2544					return -EOPNOTSUPP;
2545
2546				err = ops->changelink(dev, tb, data);
2547				if (err < 0)
2548					return err;
2549				status |= DO_SETLINK_NOTIFY;
2550			}
2551
2552			if (linkinfo[IFLA_INFO_SLAVE_DATA]) {
2553				if (!m_ops || !m_ops->slave_changelink)
2554					return -EOPNOTSUPP;
2555
2556				err = m_ops->slave_changelink(master_dev, dev,
2557							      tb, slave_data);
2558				if (err < 0)
2559					return err;
2560				status |= DO_SETLINK_NOTIFY;
2561			}
2562
2563			return do_setlink(skb, dev, ifm, tb, ifname, status);
2564		}
2565
2566		if (!(nlh->nlmsg_flags & NLM_F_CREATE)) {
2567			if (ifm->ifi_index == 0 && tb[IFLA_GROUP])
2568				return rtnl_group_changelink(skb, net,
2569						nla_get_u32(tb[IFLA_GROUP]),
2570						ifm, tb);
2571			return -ENODEV;
2572		}
2573
 
 
2574		if (tb[IFLA_MAP] || tb[IFLA_MASTER] || tb[IFLA_PROTINFO])
2575			return -EOPNOTSUPP;
2576
2577		if (!ops) {
2578#ifdef CONFIG_MODULES
2579			if (kind[0]) {
2580				__rtnl_unlock();
2581				request_module("rtnl-link-%s", kind);
2582				rtnl_lock();
2583				ops = rtnl_link_ops_get(kind);
2584				if (ops)
2585					goto replay;
2586			}
2587#endif
2588			return -EOPNOTSUPP;
2589		}
2590
2591		if (!ops->setup)
2592			return -EOPNOTSUPP;
2593
2594		if (!ifname[0]) {
2595			snprintf(ifname, IFNAMSIZ, "%s%%d", ops->kind);
2596			name_assign_type = NET_NAME_ENUM;
2597		}
2598
2599		dest_net = rtnl_link_get_net(net, tb);
2600		if (IS_ERR(dest_net))
2601			return PTR_ERR(dest_net);
2602
2603		err = -EPERM;
2604		if (!netlink_ns_capable(skb, dest_net->user_ns, CAP_NET_ADMIN))
2605			goto out;
2606
2607		if (tb[IFLA_LINK_NETNSID]) {
2608			int id = nla_get_s32(tb[IFLA_LINK_NETNSID]);
 
 
 
 
2609
2610			link_net = get_net_ns_by_id(dest_net, id);
2611			if (!link_net) {
2612				err =  -EINVAL;
2613				goto out;
2614			}
2615			err = -EPERM;
2616			if (!netlink_ns_capable(skb, link_net->user_ns, CAP_NET_ADMIN))
2617				goto out;
2618		}
2619
2620		dev = rtnl_create_link(link_net ? : dest_net, ifname,
2621				       name_assign_type, ops, tb);
2622		if (IS_ERR(dev)) {
2623			err = PTR_ERR(dev);
2624			goto out;
2625		}
2626
2627		dev->ifindex = ifm->ifi_index;
2628
2629		if (ops->newlink) {
2630			err = ops->newlink(link_net ? : net, dev, tb, data);
2631			/* Drivers should call free_netdev() in ->destructor
2632			 * and unregister it on failure after registration
2633			 * so that device could be finally freed in rtnl_unlock.
2634			 */
2635			if (err < 0) {
2636				/* If device is not registered at all, free it now */
2637				if (dev->reg_state == NETREG_UNINITIALIZED)
2638					free_netdev(dev);
2639				goto out;
2640			}
2641		} else {
2642			err = register_netdevice(dev);
2643			if (err < 0) {
2644				free_netdev(dev);
2645				goto out;
2646			}
2647		}
2648		err = rtnl_configure_link(dev, ifm);
2649		if (err < 0)
2650			goto out_unregister;
2651		if (link_net) {
2652			err = dev_change_net_namespace(dev, dest_net, ifname);
2653			if (err < 0)
2654				goto out_unregister;
2655		}
2656out:
2657		if (link_net)
2658			put_net(link_net);
2659		put_net(dest_net);
2660		return err;
2661out_unregister:
2662		if (ops->newlink) {
2663			LIST_HEAD(list_kill);
2664
2665			ops->dellink(dev, &list_kill);
2666			unregister_netdevice_many(&list_kill);
2667		} else {
2668			unregister_netdevice(dev);
2669		}
2670		goto out;
2671	}
2672}
2673
2674static int rtnl_getlink(struct sk_buff *skb, struct nlmsghdr* nlh)
2675{
2676	struct net *net = sock_net(skb->sk);
2677	struct ifinfomsg *ifm;
2678	char ifname[IFNAMSIZ];
2679	struct nlattr *tb[IFLA_MAX+1];
2680	struct net_device *dev = NULL;
2681	struct sk_buff *nskb;
2682	int err;
2683	u32 ext_filter_mask = 0;
2684
2685	err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy);
2686	if (err < 0)
2687		return err;
2688
2689	if (tb[IFLA_IFNAME])
2690		nla_strlcpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ);
2691
2692	if (tb[IFLA_EXT_MASK])
2693		ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]);
2694
2695	ifm = nlmsg_data(nlh);
2696	if (ifm->ifi_index > 0)
2697		dev = __dev_get_by_index(net, ifm->ifi_index);
2698	else if (tb[IFLA_IFNAME])
2699		dev = __dev_get_by_name(net, ifname);
2700	else
2701		return -EINVAL;
2702
2703	if (dev == NULL)
2704		return -ENODEV;
2705
2706	nskb = nlmsg_new(if_nlmsg_size(dev, ext_filter_mask), GFP_KERNEL);
2707	if (nskb == NULL)
2708		return -ENOBUFS;
2709
2710	err = rtnl_fill_ifinfo(nskb, dev, RTM_NEWLINK, NETLINK_CB(skb).portid,
2711			       nlh->nlmsg_seq, 0, 0, ext_filter_mask);
2712	if (err < 0) {
2713		/* -EMSGSIZE implies BUG in if_nlmsg_size */
2714		WARN_ON(err == -EMSGSIZE);
2715		kfree_skb(nskb);
2716	} else
2717		err = rtnl_unicast(nskb, net, NETLINK_CB(skb).portid);
2718
2719	return err;
2720}
2721
2722static u16 rtnl_calcit(struct sk_buff *skb, struct nlmsghdr *nlh)
2723{
2724	struct net *net = sock_net(skb->sk);
2725	struct net_device *dev;
2726	struct nlattr *tb[IFLA_MAX+1];
2727	u32 ext_filter_mask = 0;
2728	u16 min_ifinfo_dump_size = 0;
2729	int hdrlen;
2730
2731	/* Same kernel<->userspace interface hack as in rtnl_dump_ifinfo. */
2732	hdrlen = nlmsg_len(nlh) < sizeof(struct ifinfomsg) ?
2733		 sizeof(struct rtgenmsg) : sizeof(struct ifinfomsg);
2734
2735	if (nlmsg_parse(nlh, hdrlen, tb, IFLA_MAX, ifla_policy) >= 0) {
2736		if (tb[IFLA_EXT_MASK])
2737			ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]);
2738	}
2739
2740	if (!ext_filter_mask)
2741		return NLMSG_GOODSIZE;
2742	/*
2743	 * traverse the list of net devices and compute the minimum
2744	 * buffer size based upon the filter mask.
2745	 */
2746	list_for_each_entry(dev, &net->dev_base_head, dev_list) {
2747		min_ifinfo_dump_size = max_t(u16, min_ifinfo_dump_size,
2748					     if_nlmsg_size(dev,
2749						           ext_filter_mask));
2750	}
2751
2752	return nlmsg_total_size(min_ifinfo_dump_size);
2753}
2754
2755static int rtnl_dump_all(struct sk_buff *skb, struct netlink_callback *cb)
2756{
2757	int idx;
2758	int s_idx = cb->family;
2759
2760	if (s_idx == 0)
2761		s_idx = 1;
2762	for (idx = 1; idx <= RTNL_FAMILY_MAX; idx++) {
2763		int type = cb->nlh->nlmsg_type-RTM_BASE;
2764		if (idx < s_idx || idx == PF_PACKET)
2765			continue;
2766		if (rtnl_msg_handlers[idx] == NULL ||
2767		    rtnl_msg_handlers[idx][type].dumpit == NULL)
2768			continue;
2769		if (idx > s_idx) {
2770			memset(&cb->args[0], 0, sizeof(cb->args));
2771			cb->prev_seq = 0;
2772			cb->seq = 0;
2773		}
2774		if (rtnl_msg_handlers[idx][type].dumpit(skb, cb))
2775			break;
2776	}
2777	cb->family = idx;
2778
2779	return skb->len;
2780}
2781
2782struct sk_buff *rtmsg_ifinfo_build_skb(int type, struct net_device *dev,
2783				       unsigned int change, gfp_t flags)
2784{
2785	struct net *net = dev_net(dev);
2786	struct sk_buff *skb;
2787	int err = -ENOBUFS;
2788	size_t if_info_size;
2789
2790	skb = nlmsg_new((if_info_size = if_nlmsg_size(dev, 0)), flags);
2791	if (skb == NULL)
2792		goto errout;
2793
2794	err = rtnl_fill_ifinfo(skb, dev, type, 0, 0, change, 0, 0);
 
 
2795	if (err < 0) {
2796		/* -EMSGSIZE implies BUG in if_nlmsg_size() */
2797		WARN_ON(err == -EMSGSIZE);
2798		kfree_skb(skb);
2799		goto errout;
2800	}
2801	return skb;
2802errout:
2803	if (err < 0)
2804		rtnl_set_sk_err(net, RTNLGRP_LINK, err);
2805	return NULL;
2806}
2807
2808void rtmsg_ifinfo_send(struct sk_buff *skb, struct net_device *dev, gfp_t flags)
2809{
2810	struct net *net = dev_net(dev);
2811
2812	rtnl_notify(skb, net, 0, RTNLGRP_LINK, NULL, flags);
2813}
2814
2815void rtmsg_ifinfo(int type, struct net_device *dev, unsigned int change,
2816		  gfp_t flags)
2817{
2818	struct sk_buff *skb;
2819
2820	if (dev->reg_state != NETREG_REGISTERED)
2821		return;
2822
2823	skb = rtmsg_ifinfo_build_skb(type, dev, change, flags);
2824	if (skb)
2825		rtmsg_ifinfo_send(skb, dev, flags);
2826}
2827EXPORT_SYMBOL(rtmsg_ifinfo);
2828
2829static int nlmsg_populate_fdb_fill(struct sk_buff *skb,
2830				   struct net_device *dev,
2831				   u8 *addr, u16 vid, u32 pid, u32 seq,
2832				   int type, unsigned int flags,
2833				   int nlflags, u16 ndm_state)
2834{
2835	struct nlmsghdr *nlh;
2836	struct ndmsg *ndm;
2837
2838	nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ndm), nlflags);
2839	if (!nlh)
2840		return -EMSGSIZE;
2841
2842	ndm = nlmsg_data(nlh);
2843	ndm->ndm_family  = AF_BRIDGE;
2844	ndm->ndm_pad1	 = 0;
2845	ndm->ndm_pad2    = 0;
2846	ndm->ndm_flags	 = flags;
2847	ndm->ndm_type	 = 0;
2848	ndm->ndm_ifindex = dev->ifindex;
2849	ndm->ndm_state   = ndm_state;
2850
2851	if (nla_put(skb, NDA_LLADDR, ETH_ALEN, addr))
2852		goto nla_put_failure;
2853	if (vid)
2854		if (nla_put(skb, NDA_VLAN, sizeof(u16), &vid))
2855			goto nla_put_failure;
2856
2857	nlmsg_end(skb, nlh);
2858	return 0;
2859
2860nla_put_failure:
2861	nlmsg_cancel(skb, nlh);
2862	return -EMSGSIZE;
2863}
2864
2865static inline size_t rtnl_fdb_nlmsg_size(void)
2866{
2867	return NLMSG_ALIGN(sizeof(struct ndmsg)) +
2868	       nla_total_size(ETH_ALEN) +	/* NDA_LLADDR */
2869	       nla_total_size(sizeof(u16)) +	/* NDA_VLAN */
2870	       0;
2871}
2872
2873static void rtnl_fdb_notify(struct net_device *dev, u8 *addr, u16 vid, int type,
2874			    u16 ndm_state)
2875{
2876	struct net *net = dev_net(dev);
2877	struct sk_buff *skb;
2878	int err = -ENOBUFS;
2879
2880	skb = nlmsg_new(rtnl_fdb_nlmsg_size(), GFP_ATOMIC);
2881	if (!skb)
2882		goto errout;
2883
2884	err = nlmsg_populate_fdb_fill(skb, dev, addr, vid,
2885				      0, 0, type, NTF_SELF, 0, ndm_state);
2886	if (err < 0) {
2887		kfree_skb(skb);
2888		goto errout;
2889	}
2890
2891	rtnl_notify(skb, net, 0, RTNLGRP_NEIGH, NULL, GFP_ATOMIC);
2892	return;
2893errout:
2894	rtnl_set_sk_err(net, RTNLGRP_NEIGH, err);
2895}
2896
2897/**
2898 * ndo_dflt_fdb_add - default netdevice operation to add an FDB entry
2899 */
2900int ndo_dflt_fdb_add(struct ndmsg *ndm,
2901		     struct nlattr *tb[],
2902		     struct net_device *dev,
2903		     const unsigned char *addr, u16 vid,
2904		     u16 flags)
2905{
2906	int err = -EINVAL;
2907
2908	/* If aging addresses are supported device will need to
2909	 * implement its own handler for this.
2910	 */
2911	if (ndm->ndm_state && !(ndm->ndm_state & NUD_PERMANENT)) {
2912		pr_info("%s: FDB only supports static addresses\n", dev->name);
2913		return err;
2914	}
2915
2916	if (vid) {
2917		pr_info("%s: vlans aren't supported yet for dev_uc|mc_add()\n", dev->name);
2918		return err;
2919	}
2920
2921	if (is_unicast_ether_addr(addr) || is_link_local_ether_addr(addr))
2922		err = dev_uc_add_excl(dev, addr);
2923	else if (is_multicast_ether_addr(addr))
2924		err = dev_mc_add_excl(dev, addr);
2925
2926	/* Only return duplicate errors if NLM_F_EXCL is set */
2927	if (err == -EEXIST && !(flags & NLM_F_EXCL))
2928		err = 0;
2929
2930	return err;
2931}
2932EXPORT_SYMBOL(ndo_dflt_fdb_add);
2933
2934static int fdb_vid_parse(struct nlattr *vlan_attr, u16 *p_vid)
2935{
2936	u16 vid = 0;
2937
2938	if (vlan_attr) {
2939		if (nla_len(vlan_attr) != sizeof(u16)) {
2940			pr_info("PF_BRIDGE: RTM_NEWNEIGH with invalid vlan\n");
2941			return -EINVAL;
2942		}
2943
2944		vid = nla_get_u16(vlan_attr);
2945
2946		if (!vid || vid >= VLAN_VID_MASK) {
2947			pr_info("PF_BRIDGE: RTM_NEWNEIGH with invalid vlan id %d\n",
2948				vid);
2949			return -EINVAL;
2950		}
2951	}
2952	*p_vid = vid;
2953	return 0;
2954}
2955
2956static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh)
2957{
2958	struct net *net = sock_net(skb->sk);
2959	struct ndmsg *ndm;
2960	struct nlattr *tb[NDA_MAX+1];
2961	struct net_device *dev;
2962	u8 *addr;
2963	u16 vid;
2964	int err;
2965
2966	err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL);
2967	if (err < 0)
2968		return err;
2969
2970	ndm = nlmsg_data(nlh);
2971	if (ndm->ndm_ifindex == 0) {
2972		pr_info("PF_BRIDGE: RTM_NEWNEIGH with invalid ifindex\n");
2973		return -EINVAL;
2974	}
2975
2976	dev = __dev_get_by_index(net, ndm->ndm_ifindex);
2977	if (dev == NULL) {
2978		pr_info("PF_BRIDGE: RTM_NEWNEIGH with unknown ifindex\n");
2979		return -ENODEV;
2980	}
2981
2982	if (!tb[NDA_LLADDR] || nla_len(tb[NDA_LLADDR]) != ETH_ALEN) {
2983		pr_info("PF_BRIDGE: RTM_NEWNEIGH with invalid address\n");
2984		return -EINVAL;
2985	}
2986
2987	addr = nla_data(tb[NDA_LLADDR]);
2988
2989	err = fdb_vid_parse(tb[NDA_VLAN], &vid);
2990	if (err)
2991		return err;
2992
2993	err = -EOPNOTSUPP;
2994
2995	/* Support fdb on master device the net/bridge default case */
2996	if ((!ndm->ndm_flags || ndm->ndm_flags & NTF_MASTER) &&
2997	    (dev->priv_flags & IFF_BRIDGE_PORT)) {
2998		struct net_device *br_dev = netdev_master_upper_dev_get(dev);
2999		const struct net_device_ops *ops = br_dev->netdev_ops;
3000
3001		err = ops->ndo_fdb_add(ndm, tb, dev, addr, vid,
3002				       nlh->nlmsg_flags);
3003		if (err)
3004			goto out;
3005		else
3006			ndm->ndm_flags &= ~NTF_MASTER;
3007	}
3008
3009	/* Embedded bridge, macvlan, and any other device support */
3010	if ((ndm->ndm_flags & NTF_SELF)) {
3011		if (dev->netdev_ops->ndo_fdb_add)
3012			err = dev->netdev_ops->ndo_fdb_add(ndm, tb, dev, addr,
3013							   vid,
3014							   nlh->nlmsg_flags);
3015		else
3016			err = ndo_dflt_fdb_add(ndm, tb, dev, addr, vid,
3017					       nlh->nlmsg_flags);
3018
3019		if (!err) {
3020			rtnl_fdb_notify(dev, addr, vid, RTM_NEWNEIGH,
3021					ndm->ndm_state);
3022			ndm->ndm_flags &= ~NTF_SELF;
3023		}
3024	}
3025out:
3026	return err;
3027}
3028
3029/**
3030 * ndo_dflt_fdb_del - default netdevice operation to delete an FDB entry
3031 */
3032int ndo_dflt_fdb_del(struct ndmsg *ndm,
3033		     struct nlattr *tb[],
3034		     struct net_device *dev,
3035		     const unsigned char *addr, u16 vid)
3036{
3037	int err = -EINVAL;
3038
3039	/* If aging addresses are supported device will need to
3040	 * implement its own handler for this.
3041	 */
3042	if (!(ndm->ndm_state & NUD_PERMANENT)) {
3043		pr_info("%s: FDB only supports static addresses\n", dev->name);
3044		return err;
3045	}
3046
3047	if (is_unicast_ether_addr(addr) || is_link_local_ether_addr(addr))
3048		err = dev_uc_del(dev, addr);
3049	else if (is_multicast_ether_addr(addr))
3050		err = dev_mc_del(dev, addr);
3051
3052	return err;
3053}
3054EXPORT_SYMBOL(ndo_dflt_fdb_del);
3055
3056static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh)
3057{
3058	struct net *net = sock_net(skb->sk);
3059	struct ndmsg *ndm;
3060	struct nlattr *tb[NDA_MAX+1];
3061	struct net_device *dev;
3062	int err = -EINVAL;
3063	__u8 *addr;
3064	u16 vid;
3065
3066	if (!netlink_capable(skb, CAP_NET_ADMIN))
3067		return -EPERM;
3068
3069	err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL);
3070	if (err < 0)
3071		return err;
3072
3073	ndm = nlmsg_data(nlh);
3074	if (ndm->ndm_ifindex == 0) {
3075		pr_info("PF_BRIDGE: RTM_DELNEIGH with invalid ifindex\n");
3076		return -EINVAL;
3077	}
3078
3079	dev = __dev_get_by_index(net, ndm->ndm_ifindex);
3080	if (dev == NULL) {
3081		pr_info("PF_BRIDGE: RTM_DELNEIGH with unknown ifindex\n");
3082		return -ENODEV;
3083	}
3084
3085	if (!tb[NDA_LLADDR] || nla_len(tb[NDA_LLADDR]) != ETH_ALEN) {
3086		pr_info("PF_BRIDGE: RTM_DELNEIGH with invalid address\n");
3087		return -EINVAL;
3088	}
3089
3090	addr = nla_data(tb[NDA_LLADDR]);
3091
3092	err = fdb_vid_parse(tb[NDA_VLAN], &vid);
3093	if (err)
3094		return err;
3095
3096	err = -EOPNOTSUPP;
3097
3098	/* Support fdb on master device the net/bridge default case */
3099	if ((!ndm->ndm_flags || ndm->ndm_flags & NTF_MASTER) &&
3100	    (dev->priv_flags & IFF_BRIDGE_PORT)) {
3101		struct net_device *br_dev = netdev_master_upper_dev_get(dev);
3102		const struct net_device_ops *ops = br_dev->netdev_ops;
3103
3104		if (ops->ndo_fdb_del)
3105			err = ops->ndo_fdb_del(ndm, tb, dev, addr, vid);
3106
3107		if (err)
3108			goto out;
3109		else
3110			ndm->ndm_flags &= ~NTF_MASTER;
3111	}
3112
3113	/* Embedded bridge, macvlan, and any other device support */
3114	if (ndm->ndm_flags & NTF_SELF) {
3115		if (dev->netdev_ops->ndo_fdb_del)
3116			err = dev->netdev_ops->ndo_fdb_del(ndm, tb, dev, addr,
3117							   vid);
3118		else
3119			err = ndo_dflt_fdb_del(ndm, tb, dev, addr, vid);
3120
3121		if (!err) {
3122			rtnl_fdb_notify(dev, addr, vid, RTM_DELNEIGH,
3123					ndm->ndm_state);
3124			ndm->ndm_flags &= ~NTF_SELF;
3125		}
3126	}
3127out:
3128	return err;
3129}
3130
3131static int nlmsg_populate_fdb(struct sk_buff *skb,
3132			      struct netlink_callback *cb,
3133			      struct net_device *dev,
3134			      int *idx,
3135			      struct netdev_hw_addr_list *list)
3136{
3137	struct netdev_hw_addr *ha;
3138	int err;
3139	u32 portid, seq;
3140
3141	portid = NETLINK_CB(cb->skb).portid;
3142	seq = cb->nlh->nlmsg_seq;
3143
3144	list_for_each_entry(ha, &list->list, list) {
3145		if (*idx < cb->args[2])
3146			goto skip;
3147
3148		err = nlmsg_populate_fdb_fill(skb, dev, ha->addr, 0,
3149					      portid, seq,
3150					      RTM_NEWNEIGH, NTF_SELF,
3151					      NLM_F_MULTI, NUD_PERMANENT);
3152		if (err < 0)
3153			return err;
3154skip:
3155		*idx += 1;
3156	}
3157	return 0;
3158}
3159
3160/**
3161 * ndo_dflt_fdb_dump - default netdevice operation to dump an FDB table.
3162 * @nlh: netlink message header
3163 * @dev: netdevice
3164 *
3165 * Default netdevice operation to dump the existing unicast address list.
3166 * Returns number of addresses from list put in skb.
3167 */
3168int ndo_dflt_fdb_dump(struct sk_buff *skb,
3169		      struct netlink_callback *cb,
3170		      struct net_device *dev,
3171		      struct net_device *filter_dev,
3172		      int *idx)
3173{
3174	int err;
3175
3176	netif_addr_lock_bh(dev);
3177	err = nlmsg_populate_fdb(skb, cb, dev, idx, &dev->uc);
3178	if (err)
3179		goto out;
3180	err = nlmsg_populate_fdb(skb, cb, dev, idx, &dev->mc);
3181out:
3182	netif_addr_unlock_bh(dev);
3183	return err;
3184}
3185EXPORT_SYMBOL(ndo_dflt_fdb_dump);
3186
3187static int rtnl_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb)
3188{
3189	struct net_device *dev;
3190	struct nlattr *tb[IFLA_MAX+1];
3191	struct net_device *br_dev = NULL;
3192	const struct net_device_ops *ops = NULL;
3193	const struct net_device_ops *cops = NULL;
3194	struct ifinfomsg *ifm = nlmsg_data(cb->nlh);
3195	struct net *net = sock_net(skb->sk);
3196	struct hlist_head *head;
3197	int brport_idx = 0;
3198	int br_idx = 0;
3199	int h, s_h;
3200	int idx = 0, s_idx;
3201	int err = 0;
3202	int fidx = 0;
3203
3204	if (nlmsg_parse(cb->nlh, sizeof(struct ifinfomsg), tb, IFLA_MAX,
3205			ifla_policy) == 0) {
3206		if (tb[IFLA_MASTER])
3207			br_idx = nla_get_u32(tb[IFLA_MASTER]);
3208	}
3209
3210	brport_idx = ifm->ifi_index;
3211
3212	if (br_idx) {
3213		br_dev = __dev_get_by_index(net, br_idx);
3214		if (!br_dev)
3215			return -ENODEV;
3216
3217		ops = br_dev->netdev_ops;
3218	}
3219
3220	s_h = cb->args[0];
3221	s_idx = cb->args[1];
3222
3223	for (h = s_h; h < NETDEV_HASHENTRIES; h++, s_idx = 0) {
3224		idx = 0;
3225		head = &net->dev_index_head[h];
3226		hlist_for_each_entry(dev, head, index_hlist) {
3227
3228			if (brport_idx && (dev->ifindex != brport_idx))
3229				continue;
3230
3231			if (!br_idx) { /* user did not specify a specific bridge */
3232				if (dev->priv_flags & IFF_BRIDGE_PORT) {
3233					br_dev = netdev_master_upper_dev_get(dev);
3234					cops = br_dev->netdev_ops;
3235				}
3236			} else {
3237				if (dev != br_dev &&
3238				    !(dev->priv_flags & IFF_BRIDGE_PORT))
3239					continue;
3240
3241				if (br_dev != netdev_master_upper_dev_get(dev) &&
3242				    !(dev->priv_flags & IFF_EBRIDGE))
3243					continue;
3244				cops = ops;
3245			}
3246
3247			if (idx < s_idx)
3248				goto cont;
3249
3250			if (dev->priv_flags & IFF_BRIDGE_PORT) {
3251				if (cops && cops->ndo_fdb_dump) {
3252					err = cops->ndo_fdb_dump(skb, cb,
3253								br_dev, dev,
3254								&fidx);
3255					if (err == -EMSGSIZE)
3256						goto out;
3257				}
3258			}
3259
3260			if (dev->netdev_ops->ndo_fdb_dump)
3261				err = dev->netdev_ops->ndo_fdb_dump(skb, cb,
3262								    dev, NULL,
3263								    &fidx);
3264			else
3265				err = ndo_dflt_fdb_dump(skb, cb, dev, NULL,
3266							&fidx);
3267			if (err == -EMSGSIZE)
3268				goto out;
3269
3270			cops = NULL;
3271
3272			/* reset fdb offset to 0 for rest of the interfaces */
3273			cb->args[2] = 0;
3274			fidx = 0;
3275cont:
3276			idx++;
3277		}
3278	}
3279
3280out:
3281	cb->args[0] = h;
3282	cb->args[1] = idx;
3283	cb->args[2] = fidx;
3284
3285	return skb->len;
3286}
3287
3288static int brport_nla_put_flag(struct sk_buff *skb, u32 flags, u32 mask,
3289			       unsigned int attrnum, unsigned int flag)
3290{
3291	if (mask & flag)
3292		return nla_put_u8(skb, attrnum, !!(flags & flag));
3293	return 0;
3294}
3295
3296int ndo_dflt_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
3297			    struct net_device *dev, u16 mode,
3298			    u32 flags, u32 mask, int nlflags,
3299			    u32 filter_mask,
3300			    int (*vlan_fill)(struct sk_buff *skb,
3301					     struct net_device *dev,
3302					     u32 filter_mask))
3303{
3304	struct nlmsghdr *nlh;
3305	struct ifinfomsg *ifm;
3306	struct nlattr *br_afspec;
3307	struct nlattr *protinfo;
3308	u8 operstate = netif_running(dev) ? dev->operstate : IF_OPER_DOWN;
3309	struct net_device *br_dev = netdev_master_upper_dev_get(dev);
3310	int err = 0;
3311
3312	nlh = nlmsg_put(skb, pid, seq, RTM_NEWLINK, sizeof(*ifm), nlflags);
3313	if (nlh == NULL)
3314		return -EMSGSIZE;
3315
3316	ifm = nlmsg_data(nlh);
3317	ifm->ifi_family = AF_BRIDGE;
3318	ifm->__ifi_pad = 0;
3319	ifm->ifi_type = dev->type;
3320	ifm->ifi_index = dev->ifindex;
3321	ifm->ifi_flags = dev_get_flags(dev);
3322	ifm->ifi_change = 0;
3323
3324
3325	if (nla_put_string(skb, IFLA_IFNAME, dev->name) ||
3326	    nla_put_u32(skb, IFLA_MTU, dev->mtu) ||
3327	    nla_put_u8(skb, IFLA_OPERSTATE, operstate) ||
3328	    (br_dev &&
3329	     nla_put_u32(skb, IFLA_MASTER, br_dev->ifindex)) ||
3330	    (dev->addr_len &&
3331	     nla_put(skb, IFLA_ADDRESS, dev->addr_len, dev->dev_addr)) ||
3332	    (dev->ifindex != dev_get_iflink(dev) &&
3333	     nla_put_u32(skb, IFLA_LINK, dev_get_iflink(dev))))
3334		goto nla_put_failure;
3335
3336	br_afspec = nla_nest_start(skb, IFLA_AF_SPEC);
3337	if (!br_afspec)
3338		goto nla_put_failure;
3339
3340	if (nla_put_u16(skb, IFLA_BRIDGE_FLAGS, BRIDGE_FLAGS_SELF)) {
3341		nla_nest_cancel(skb, br_afspec);
3342		goto nla_put_failure;
3343	}
3344
3345	if (mode != BRIDGE_MODE_UNDEF) {
3346		if (nla_put_u16(skb, IFLA_BRIDGE_MODE, mode)) {
3347			nla_nest_cancel(skb, br_afspec);
3348			goto nla_put_failure;
3349		}
3350	}
3351	if (vlan_fill) {
3352		err = vlan_fill(skb, dev, filter_mask);
3353		if (err) {
3354			nla_nest_cancel(skb, br_afspec);
3355			goto nla_put_failure;
3356		}
3357	}
3358	nla_nest_end(skb, br_afspec);
3359
3360	protinfo = nla_nest_start(skb, IFLA_PROTINFO | NLA_F_NESTED);
3361	if (!protinfo)
3362		goto nla_put_failure;
3363
3364	if (brport_nla_put_flag(skb, flags, mask,
3365				IFLA_BRPORT_MODE, BR_HAIRPIN_MODE) ||
3366	    brport_nla_put_flag(skb, flags, mask,
3367				IFLA_BRPORT_GUARD, BR_BPDU_GUARD) ||
3368	    brport_nla_put_flag(skb, flags, mask,
3369				IFLA_BRPORT_FAST_LEAVE,
3370				BR_MULTICAST_FAST_LEAVE) ||
3371	    brport_nla_put_flag(skb, flags, mask,
3372				IFLA_BRPORT_PROTECT, BR_ROOT_BLOCK) ||
3373	    brport_nla_put_flag(skb, flags, mask,
3374				IFLA_BRPORT_LEARNING, BR_LEARNING) ||
3375	    brport_nla_put_flag(skb, flags, mask,
3376				IFLA_BRPORT_LEARNING_SYNC, BR_LEARNING_SYNC) ||
3377	    brport_nla_put_flag(skb, flags, mask,
3378				IFLA_BRPORT_UNICAST_FLOOD, BR_FLOOD) ||
3379	    brport_nla_put_flag(skb, flags, mask,
3380				IFLA_BRPORT_PROXYARP, BR_PROXYARP)) {
3381		nla_nest_cancel(skb, protinfo);
3382		goto nla_put_failure;
3383	}
3384
3385	nla_nest_end(skb, protinfo);
3386
3387	nlmsg_end(skb, nlh);
3388	return 0;
3389nla_put_failure:
3390	nlmsg_cancel(skb, nlh);
3391	return err ? err : -EMSGSIZE;
3392}
3393EXPORT_SYMBOL_GPL(ndo_dflt_bridge_getlink);
3394
3395static int rtnl_bridge_getlink(struct sk_buff *skb, struct netlink_callback *cb)
3396{
3397	struct net *net = sock_net(skb->sk);
3398	struct net_device *dev;
3399	int idx = 0;
3400	u32 portid = NETLINK_CB(cb->skb).portid;
3401	u32 seq = cb->nlh->nlmsg_seq;
3402	u32 filter_mask = 0;
3403	int err;
3404
3405	if (nlmsg_len(cb->nlh) > sizeof(struct ifinfomsg)) {
3406		struct nlattr *extfilt;
3407
3408		extfilt = nlmsg_find_attr(cb->nlh, sizeof(struct ifinfomsg),
3409					  IFLA_EXT_MASK);
3410		if (extfilt) {
3411			if (nla_len(extfilt) < sizeof(filter_mask))
3412				return -EINVAL;
3413
3414			filter_mask = nla_get_u32(extfilt);
3415		}
3416	}
3417
3418	rcu_read_lock();
3419	for_each_netdev_rcu(net, dev) {
3420		const struct net_device_ops *ops = dev->netdev_ops;
3421		struct net_device *br_dev = netdev_master_upper_dev_get(dev);
3422
3423		if (br_dev && br_dev->netdev_ops->ndo_bridge_getlink) {
3424			if (idx >= cb->args[0]) {
3425				err = br_dev->netdev_ops->ndo_bridge_getlink(
3426						skb, portid, seq, dev,
3427						filter_mask, NLM_F_MULTI);
3428				if (err < 0 && err != -EOPNOTSUPP)
3429					break;
3430			}
3431			idx++;
3432		}
3433
3434		if (ops->ndo_bridge_getlink) {
3435			if (idx >= cb->args[0]) {
3436				err = ops->ndo_bridge_getlink(skb, portid,
3437							      seq, dev,
3438							      filter_mask,
3439							      NLM_F_MULTI);
3440				if (err < 0 && err != -EOPNOTSUPP)
3441					break;
3442			}
3443			idx++;
3444		}
3445	}
3446	rcu_read_unlock();
3447	cb->args[0] = idx;
3448
3449	return skb->len;
3450}
3451
3452static inline size_t bridge_nlmsg_size(void)
3453{
3454	return NLMSG_ALIGN(sizeof(struct ifinfomsg))
3455		+ nla_total_size(IFNAMSIZ)	/* IFLA_IFNAME */
3456		+ nla_total_size(MAX_ADDR_LEN)	/* IFLA_ADDRESS */
3457		+ nla_total_size(sizeof(u32))	/* IFLA_MASTER */
3458		+ nla_total_size(sizeof(u32))	/* IFLA_MTU */
3459		+ nla_total_size(sizeof(u32))	/* IFLA_LINK */
3460		+ nla_total_size(sizeof(u32))	/* IFLA_OPERSTATE */
3461		+ nla_total_size(sizeof(u8))	/* IFLA_PROTINFO */
3462		+ nla_total_size(sizeof(struct nlattr))	/* IFLA_AF_SPEC */
3463		+ nla_total_size(sizeof(u16))	/* IFLA_BRIDGE_FLAGS */
3464		+ nla_total_size(sizeof(u16));	/* IFLA_BRIDGE_MODE */
3465}
3466
3467static int rtnl_bridge_notify(struct net_device *dev)
3468{
3469	struct net *net = dev_net(dev);
3470	struct sk_buff *skb;
3471	int err = -EOPNOTSUPP;
3472
3473	if (!dev->netdev_ops->ndo_bridge_getlink)
3474		return 0;
3475
3476	skb = nlmsg_new(bridge_nlmsg_size(), GFP_ATOMIC);
3477	if (!skb) {
3478		err = -ENOMEM;
3479		goto errout;
3480	}
3481
3482	err = dev->netdev_ops->ndo_bridge_getlink(skb, 0, 0, dev, 0, 0);
3483	if (err < 0)
3484		goto errout;
3485
3486	if (!skb->len)
3487		goto errout;
3488
3489	rtnl_notify(skb, net, 0, RTNLGRP_LINK, NULL, GFP_ATOMIC);
3490	return 0;
3491errout:
3492	WARN_ON(err == -EMSGSIZE);
3493	kfree_skb(skb);
3494	if (err)
3495		rtnl_set_sk_err(net, RTNLGRP_LINK, err);
3496	return err;
3497}
3498
3499static int rtnl_bridge_setlink(struct sk_buff *skb, struct nlmsghdr *nlh)
3500{
3501	struct net *net = sock_net(skb->sk);
3502	struct ifinfomsg *ifm;
3503	struct net_device *dev;
3504	struct nlattr *br_spec, *attr = NULL;
3505	int rem, err = -EOPNOTSUPP;
3506	u16 flags = 0;
3507	bool have_flags = false;
3508
3509	if (nlmsg_len(nlh) < sizeof(*ifm))
3510		return -EINVAL;
3511
3512	ifm = nlmsg_data(nlh);
3513	if (ifm->ifi_family != AF_BRIDGE)
3514		return -EPFNOSUPPORT;
3515
3516	dev = __dev_get_by_index(net, ifm->ifi_index);
3517	if (!dev) {
3518		pr_info("PF_BRIDGE: RTM_SETLINK with unknown ifindex\n");
3519		return -ENODEV;
3520	}
3521
3522	br_spec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC);
3523	if (br_spec) {
3524		nla_for_each_nested(attr, br_spec, rem) {
3525			if (nla_type(attr) == IFLA_BRIDGE_FLAGS) {
3526				if (nla_len(attr) < sizeof(flags))
3527					return -EINVAL;
3528
3529				have_flags = true;
3530				flags = nla_get_u16(attr);
3531				break;
3532			}
3533		}
3534	}
3535
3536	if (!flags || (flags & BRIDGE_FLAGS_MASTER)) {
3537		struct net_device *br_dev = netdev_master_upper_dev_get(dev);
3538
3539		if (!br_dev || !br_dev->netdev_ops->ndo_bridge_setlink) {
3540			err = -EOPNOTSUPP;
3541			goto out;
3542		}
3543
3544		err = br_dev->netdev_ops->ndo_bridge_setlink(dev, nlh, flags);
3545		if (err)
3546			goto out;
3547
3548		flags &= ~BRIDGE_FLAGS_MASTER;
3549	}
3550
3551	if ((flags & BRIDGE_FLAGS_SELF)) {
3552		if (!dev->netdev_ops->ndo_bridge_setlink)
3553			err = -EOPNOTSUPP;
3554		else
3555			err = dev->netdev_ops->ndo_bridge_setlink(dev, nlh,
3556								  flags);
3557		if (!err) {
3558			flags &= ~BRIDGE_FLAGS_SELF;
3559
3560			/* Generate event to notify upper layer of bridge
3561			 * change
3562			 */
3563			err = rtnl_bridge_notify(dev);
3564		}
3565	}
3566
3567	if (have_flags)
3568		memcpy(nla_data(attr), &flags, sizeof(flags));
3569out:
3570	return err;
3571}
3572
3573static int rtnl_bridge_dellink(struct sk_buff *skb, struct nlmsghdr *nlh)
3574{
3575	struct net *net = sock_net(skb->sk);
3576	struct ifinfomsg *ifm;
3577	struct net_device *dev;
3578	struct nlattr *br_spec, *attr = NULL;
3579	int rem, err = -EOPNOTSUPP;
3580	u16 flags = 0;
3581	bool have_flags = false;
3582
3583	if (nlmsg_len(nlh) < sizeof(*ifm))
3584		return -EINVAL;
3585
3586	ifm = nlmsg_data(nlh);
3587	if (ifm->ifi_family != AF_BRIDGE)
3588		return -EPFNOSUPPORT;
3589
3590	dev = __dev_get_by_index(net, ifm->ifi_index);
3591	if (!dev) {
3592		pr_info("PF_BRIDGE: RTM_SETLINK with unknown ifindex\n");
3593		return -ENODEV;
3594	}
3595
3596	br_spec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC);
3597	if (br_spec) {
3598		nla_for_each_nested(attr, br_spec, rem) {
3599			if (nla_type(attr) == IFLA_BRIDGE_FLAGS) {
3600				if (nla_len(attr) < sizeof(flags))
3601					return -EINVAL;
3602
3603				have_flags = true;
3604				flags = nla_get_u16(attr);
3605				break;
3606			}
3607		}
3608	}
3609
3610	if (!flags || (flags & BRIDGE_FLAGS_MASTER)) {
3611		struct net_device *br_dev = netdev_master_upper_dev_get(dev);
3612
3613		if (!br_dev || !br_dev->netdev_ops->ndo_bridge_dellink) {
3614			err = -EOPNOTSUPP;
3615			goto out;
3616		}
3617
3618		err = br_dev->netdev_ops->ndo_bridge_dellink(dev, nlh, flags);
3619		if (err)
3620			goto out;
3621
3622		flags &= ~BRIDGE_FLAGS_MASTER;
3623	}
3624
3625	if ((flags & BRIDGE_FLAGS_SELF)) {
3626		if (!dev->netdev_ops->ndo_bridge_dellink)
3627			err = -EOPNOTSUPP;
3628		else
3629			err = dev->netdev_ops->ndo_bridge_dellink(dev, nlh,
3630								  flags);
3631
3632		if (!err) {
3633			flags &= ~BRIDGE_FLAGS_SELF;
3634
3635			/* Generate event to notify upper layer of bridge
3636			 * change
3637			 */
3638			err = rtnl_bridge_notify(dev);
3639		}
3640	}
3641
3642	if (have_flags)
3643		memcpy(nla_data(attr), &flags, sizeof(flags));
3644out:
3645	return err;
3646}
3647
3648static bool stats_attr_valid(unsigned int mask, int attrid, int idxattr)
3649{
3650	return (mask & IFLA_STATS_FILTER_BIT(attrid)) &&
3651	       (!idxattr || idxattr == attrid);
3652}
3653
3654#define IFLA_OFFLOAD_XSTATS_FIRST (IFLA_OFFLOAD_XSTATS_UNSPEC + 1)
3655static int rtnl_get_offload_stats_attr_size(int attr_id)
3656{
3657	switch (attr_id) {
3658	case IFLA_OFFLOAD_XSTATS_CPU_HIT:
3659		return sizeof(struct rtnl_link_stats64);
3660	}
3661
3662	return 0;
3663}
3664
3665static int rtnl_get_offload_stats(struct sk_buff *skb, struct net_device *dev,
3666				  int *prividx)
3667{
3668	struct nlattr *attr = NULL;
3669	int attr_id, size;
3670	void *attr_data;
3671	int err;
3672
3673	if (!(dev->netdev_ops && dev->netdev_ops->ndo_has_offload_stats &&
3674	      dev->netdev_ops->ndo_get_offload_stats))
3675		return -ENODATA;
3676
3677	for (attr_id = IFLA_OFFLOAD_XSTATS_FIRST;
3678	     attr_id <= IFLA_OFFLOAD_XSTATS_MAX; attr_id++) {
3679		if (attr_id < *prividx)
3680			continue;
3681
3682		size = rtnl_get_offload_stats_attr_size(attr_id);
3683		if (!size)
3684			continue;
3685
3686		if (!dev->netdev_ops->ndo_has_offload_stats(dev, attr_id))
3687			continue;
3688
3689		attr = nla_reserve_64bit(skb, attr_id, size,
3690					 IFLA_OFFLOAD_XSTATS_UNSPEC);
3691		if (!attr)
3692			goto nla_put_failure;
3693
3694		attr_data = nla_data(attr);
3695		memset(attr_data, 0, size);
3696		err = dev->netdev_ops->ndo_get_offload_stats(attr_id, dev,
3697							     attr_data);
3698		if (err)
3699			goto get_offload_stats_failure;
3700	}
3701
3702	if (!attr)
3703		return -ENODATA;
3704
3705	*prividx = 0;
3706	return 0;
3707
3708nla_put_failure:
3709	err = -EMSGSIZE;
3710get_offload_stats_failure:
3711	*prividx = attr_id;
3712	return err;
3713}
3714
3715static int rtnl_get_offload_stats_size(const struct net_device *dev)
3716{
3717	int nla_size = 0;
3718	int attr_id;
3719	int size;
3720
3721	if (!(dev->netdev_ops && dev->netdev_ops->ndo_has_offload_stats &&
3722	      dev->netdev_ops->ndo_get_offload_stats))
3723		return 0;
3724
3725	for (attr_id = IFLA_OFFLOAD_XSTATS_FIRST;
3726	     attr_id <= IFLA_OFFLOAD_XSTATS_MAX; attr_id++) {
3727		if (!dev->netdev_ops->ndo_has_offload_stats(dev, attr_id))
3728			continue;
3729		size = rtnl_get_offload_stats_attr_size(attr_id);
3730		nla_size += nla_total_size_64bit(size);
3731	}
3732
3733	if (nla_size != 0)
3734		nla_size += nla_total_size(0);
3735
3736	return nla_size;
3737}
3738
3739static int rtnl_fill_statsinfo(struct sk_buff *skb, struct net_device *dev,
3740			       int type, u32 pid, u32 seq, u32 change,
3741			       unsigned int flags, unsigned int filter_mask,
3742			       int *idxattr, int *prividx)
3743{
3744	struct if_stats_msg *ifsm;
3745	struct nlmsghdr *nlh;
3746	struct nlattr *attr;
3747	int s_prividx = *prividx;
3748	int err;
3749
3750	ASSERT_RTNL();
3751
3752	nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ifsm), flags);
3753	if (!nlh)
3754		return -EMSGSIZE;
3755
3756	ifsm = nlmsg_data(nlh);
3757	ifsm->ifindex = dev->ifindex;
3758	ifsm->filter_mask = filter_mask;
3759
3760	if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_64, *idxattr)) {
3761		struct rtnl_link_stats64 *sp;
3762
3763		attr = nla_reserve_64bit(skb, IFLA_STATS_LINK_64,
3764					 sizeof(struct rtnl_link_stats64),
3765					 IFLA_STATS_UNSPEC);
3766		if (!attr)
3767			goto nla_put_failure;
3768
3769		sp = nla_data(attr);
3770		dev_get_stats(dev, sp);
3771	}
3772
3773	if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_XSTATS, *idxattr)) {
3774		const struct rtnl_link_ops *ops = dev->rtnl_link_ops;
3775
3776		if (ops && ops->fill_linkxstats) {
3777			*idxattr = IFLA_STATS_LINK_XSTATS;
3778			attr = nla_nest_start(skb,
3779					      IFLA_STATS_LINK_XSTATS);
3780			if (!attr)
3781				goto nla_put_failure;
3782
3783			err = ops->fill_linkxstats(skb, dev, prividx, *idxattr);
3784			nla_nest_end(skb, attr);
3785			if (err)
3786				goto nla_put_failure;
3787			*idxattr = 0;
3788		}
3789	}
3790
3791	if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_XSTATS_SLAVE,
3792			     *idxattr)) {
3793		const struct rtnl_link_ops *ops = NULL;
3794		const struct net_device *master;
3795
3796		master = netdev_master_upper_dev_get(dev);
3797		if (master)
3798			ops = master->rtnl_link_ops;
3799		if (ops && ops->fill_linkxstats) {
3800			*idxattr = IFLA_STATS_LINK_XSTATS_SLAVE;
3801			attr = nla_nest_start(skb,
3802					      IFLA_STATS_LINK_XSTATS_SLAVE);
3803			if (!attr)
3804				goto nla_put_failure;
3805
3806			err = ops->fill_linkxstats(skb, dev, prividx, *idxattr);
3807			nla_nest_end(skb, attr);
3808			if (err)
3809				goto nla_put_failure;
3810			*idxattr = 0;
3811		}
3812	}
3813
3814	if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_OFFLOAD_XSTATS,
3815			     *idxattr)) {
3816		*idxattr = IFLA_STATS_LINK_OFFLOAD_XSTATS;
3817		attr = nla_nest_start(skb, IFLA_STATS_LINK_OFFLOAD_XSTATS);
3818		if (!attr)
3819			goto nla_put_failure;
3820
3821		err = rtnl_get_offload_stats(skb, dev, prividx);
3822		if (err == -ENODATA)
3823			nla_nest_cancel(skb, attr);
3824		else
3825			nla_nest_end(skb, attr);
3826
3827		if (err && err != -ENODATA)
3828			goto nla_put_failure;
3829		*idxattr = 0;
3830	}
3831
3832	nlmsg_end(skb, nlh);
3833
3834	return 0;
3835
3836nla_put_failure:
3837	/* not a multi message or no progress mean a real error */
3838	if (!(flags & NLM_F_MULTI) || s_prividx == *prividx)
3839		nlmsg_cancel(skb, nlh);
3840	else
3841		nlmsg_end(skb, nlh);
3842
3843	return -EMSGSIZE;
3844}
3845
3846static size_t if_nlmsg_stats_size(const struct net_device *dev,
3847				  u32 filter_mask)
3848{
3849	size_t size = 0;
3850
3851	if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_64, 0))
3852		size += nla_total_size_64bit(sizeof(struct rtnl_link_stats64));
3853
3854	if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_XSTATS, 0)) {
3855		const struct rtnl_link_ops *ops = dev->rtnl_link_ops;
3856		int attr = IFLA_STATS_LINK_XSTATS;
3857
3858		if (ops && ops->get_linkxstats_size) {
3859			size += nla_total_size(ops->get_linkxstats_size(dev,
3860									attr));
3861			/* for IFLA_STATS_LINK_XSTATS */
3862			size += nla_total_size(0);
3863		}
3864	}
3865
3866	if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_XSTATS_SLAVE, 0)) {
3867		struct net_device *_dev = (struct net_device *)dev;
3868		const struct rtnl_link_ops *ops = NULL;
3869		const struct net_device *master;
3870
3871		/* netdev_master_upper_dev_get can't take const */
3872		master = netdev_master_upper_dev_get(_dev);
3873		if (master)
3874			ops = master->rtnl_link_ops;
3875		if (ops && ops->get_linkxstats_size) {
3876			int attr = IFLA_STATS_LINK_XSTATS_SLAVE;
3877
3878			size += nla_total_size(ops->get_linkxstats_size(dev,
3879									attr));
3880			/* for IFLA_STATS_LINK_XSTATS_SLAVE */
3881			size += nla_total_size(0);
3882		}
3883	}
3884
3885	if (stats_attr_valid(filter_mask, IFLA_STATS_LINK_OFFLOAD_XSTATS, 0))
3886		size += rtnl_get_offload_stats_size(dev);
3887
3888	return size;
3889}
3890
3891static int rtnl_stats_get(struct sk_buff *skb, struct nlmsghdr *nlh)
3892{
3893	struct net *net = sock_net(skb->sk);
3894	struct net_device *dev = NULL;
3895	int idxattr = 0, prividx = 0;
3896	struct if_stats_msg *ifsm;
3897	struct sk_buff *nskb;
3898	u32 filter_mask;
3899	int err;
3900
3901	if (nlmsg_len(nlh) < sizeof(*ifsm))
3902		return -EINVAL;
3903
3904	ifsm = nlmsg_data(nlh);
3905	if (ifsm->ifindex > 0)
3906		dev = __dev_get_by_index(net, ifsm->ifindex);
3907	else
3908		return -EINVAL;
3909
3910	if (!dev)
3911		return -ENODEV;
3912
3913	filter_mask = ifsm->filter_mask;
3914	if (!filter_mask)
3915		return -EINVAL;
3916
3917	nskb = nlmsg_new(if_nlmsg_stats_size(dev, filter_mask), GFP_KERNEL);
3918	if (!nskb)
3919		return -ENOBUFS;
3920
3921	err = rtnl_fill_statsinfo(nskb, dev, RTM_NEWSTATS,
3922				  NETLINK_CB(skb).portid, nlh->nlmsg_seq, 0,
3923				  0, filter_mask, &idxattr, &prividx);
3924	if (err < 0) {
3925		/* -EMSGSIZE implies BUG in if_nlmsg_stats_size */
3926		WARN_ON(err == -EMSGSIZE);
3927		kfree_skb(nskb);
3928	} else {
3929		err = rtnl_unicast(nskb, net, NETLINK_CB(skb).portid);
3930	}
3931
3932	return err;
3933}
3934
3935static int rtnl_stats_dump(struct sk_buff *skb, struct netlink_callback *cb)
3936{
3937	int h, s_h, err, s_idx, s_idxattr, s_prividx;
3938	struct net *net = sock_net(skb->sk);
3939	unsigned int flags = NLM_F_MULTI;
3940	struct if_stats_msg *ifsm;
3941	struct hlist_head *head;
3942	struct net_device *dev;
3943	u32 filter_mask = 0;
3944	int idx = 0;
3945
3946	s_h = cb->args[0];
3947	s_idx = cb->args[1];
3948	s_idxattr = cb->args[2];
3949	s_prividx = cb->args[3];
3950
3951	cb->seq = net->dev_base_seq;
3952
3953	if (nlmsg_len(cb->nlh) < sizeof(*ifsm))
3954		return -EINVAL;
3955
3956	ifsm = nlmsg_data(cb->nlh);
3957	filter_mask = ifsm->filter_mask;
3958	if (!filter_mask)
3959		return -EINVAL;
3960
3961	for (h = s_h; h < NETDEV_HASHENTRIES; h++, s_idx = 0) {
3962		idx = 0;
3963		head = &net->dev_index_head[h];
3964		hlist_for_each_entry(dev, head, index_hlist) {
3965			if (idx < s_idx)
3966				goto cont;
3967			err = rtnl_fill_statsinfo(skb, dev, RTM_NEWSTATS,
3968						  NETLINK_CB(cb->skb).portid,
3969						  cb->nlh->nlmsg_seq, 0,
3970						  flags, filter_mask,
3971						  &s_idxattr, &s_prividx);
3972			/* If we ran out of room on the first message,
3973			 * we're in trouble
3974			 */
3975			WARN_ON((err == -EMSGSIZE) && (skb->len == 0));
3976
3977			if (err < 0)
3978				goto out;
3979			s_prividx = 0;
3980			s_idxattr = 0;
3981			nl_dump_check_consistent(cb, nlmsg_hdr(skb));
3982cont:
3983			idx++;
3984		}
3985	}
3986out:
3987	cb->args[3] = s_prividx;
3988	cb->args[2] = s_idxattr;
3989	cb->args[1] = idx;
3990	cb->args[0] = h;
3991
3992	return skb->len;
3993}
3994
3995/* Process one rtnetlink message. */
3996
3997static int rtnetlink_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
3998{
3999	struct net *net = sock_net(skb->sk);
4000	rtnl_doit_func doit;
4001	int kind;
 
4002	int family;
4003	int type;
4004	int err;
4005
4006	type = nlh->nlmsg_type;
4007	if (type > RTM_MAX)
4008		return -EOPNOTSUPP;
4009
4010	type -= RTM_BASE;
4011
4012	/* All the messages must have at least 1 byte length */
4013	if (nlmsg_len(nlh) < sizeof(struct rtgenmsg))
4014		return 0;
4015
4016	family = ((struct rtgenmsg *)nlmsg_data(nlh))->rtgen_family;
 
4017	kind = type&3;
4018
4019	if (kind != 2 && !netlink_net_capable(skb, CAP_NET_ADMIN))
4020		return -EPERM;
4021
4022	if (kind == 2 && nlh->nlmsg_flags&NLM_F_DUMP) {
4023		struct sock *rtnl;
4024		rtnl_dumpit_func dumpit;
4025		rtnl_calcit_func calcit;
4026		u16 min_dump_alloc = 0;
4027
4028		dumpit = rtnl_get_dumpit(family, type);
4029		if (dumpit == NULL)
4030			return -EOPNOTSUPP;
4031		calcit = rtnl_get_calcit(family, type);
4032		if (calcit)
4033			min_dump_alloc = calcit(skb, nlh);
4034
4035		__rtnl_unlock();
4036		rtnl = net->rtnl;
4037		{
4038			struct netlink_dump_control c = {
4039				.dump		= dumpit,
4040				.min_dump_alloc	= min_dump_alloc,
4041			};
4042			err = netlink_dump_start(rtnl, skb, nlh, &c);
4043		}
4044		rtnl_lock();
4045		return err;
4046	}
4047
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4048	doit = rtnl_get_doit(family, type);
4049	if (doit == NULL)
4050		return -EOPNOTSUPP;
4051
4052	return doit(skb, nlh);
4053}
4054
4055static void rtnetlink_rcv(struct sk_buff *skb)
4056{
4057	rtnl_lock();
4058	netlink_rcv_skb(skb, &rtnetlink_rcv_msg);
4059	rtnl_unlock();
4060}
4061
4062static int rtnetlink_event(struct notifier_block *this, unsigned long event, void *ptr)
4063{
4064	struct net_device *dev = netdev_notifier_info_to_dev(ptr);
4065
4066	switch (event) {
4067	case NETDEV_UP:
4068	case NETDEV_DOWN:
4069	case NETDEV_PRE_UP:
4070	case NETDEV_POST_INIT:
4071	case NETDEV_REGISTER:
4072	case NETDEV_CHANGE:
4073	case NETDEV_PRE_TYPE_CHANGE:
4074	case NETDEV_GOING_DOWN:
4075	case NETDEV_UNREGISTER:
4076	case NETDEV_UNREGISTER_FINAL:
4077	case NETDEV_RELEASE:
4078	case NETDEV_JOIN:
4079	case NETDEV_BONDING_INFO:
4080		break;
4081	default:
4082		rtmsg_ifinfo(RTM_NEWLINK, dev, 0, GFP_KERNEL);
4083		break;
4084	}
4085	return NOTIFY_DONE;
4086}
4087
4088static struct notifier_block rtnetlink_dev_notifier = {
4089	.notifier_call	= rtnetlink_event,
4090};
4091
4092
4093static int __net_init rtnetlink_net_init(struct net *net)
4094{
4095	struct sock *sk;
4096	struct netlink_kernel_cfg cfg = {
4097		.groups		= RTNLGRP_MAX,
4098		.input		= rtnetlink_rcv,
4099		.cb_mutex	= &rtnl_mutex,
4100		.flags		= NL_CFG_F_NONROOT_RECV,
4101	};
4102
4103	sk = netlink_kernel_create(net, NETLINK_ROUTE, &cfg);
4104	if (!sk)
4105		return -ENOMEM;
4106	net->rtnl = sk;
4107	return 0;
4108}
4109
4110static void __net_exit rtnetlink_net_exit(struct net *net)
4111{
4112	netlink_kernel_release(net->rtnl);
4113	net->rtnl = NULL;
4114}
4115
4116static struct pernet_operations rtnetlink_net_ops = {
4117	.init = rtnetlink_net_init,
4118	.exit = rtnetlink_net_exit,
4119};
4120
4121void __init rtnetlink_init(void)
4122{
 
 
 
 
 
 
 
 
 
 
4123	if (register_pernet_subsys(&rtnetlink_net_ops))
4124		panic("rtnetlink_init: cannot initialize rtnetlink\n");
4125
 
4126	register_netdevice_notifier(&rtnetlink_dev_notifier);
4127
4128	rtnl_register(PF_UNSPEC, RTM_GETLINK, rtnl_getlink,
4129		      rtnl_dump_ifinfo, rtnl_calcit);
4130	rtnl_register(PF_UNSPEC, RTM_SETLINK, rtnl_setlink, NULL, NULL);
4131	rtnl_register(PF_UNSPEC, RTM_NEWLINK, rtnl_newlink, NULL, NULL);
4132	rtnl_register(PF_UNSPEC, RTM_DELLINK, rtnl_dellink, NULL, NULL);
4133
4134	rtnl_register(PF_UNSPEC, RTM_GETADDR, NULL, rtnl_dump_all, NULL);
4135	rtnl_register(PF_UNSPEC, RTM_GETROUTE, NULL, rtnl_dump_all, NULL);
 
4136
4137	rtnl_register(PF_BRIDGE, RTM_NEWNEIGH, rtnl_fdb_add, NULL, NULL);
4138	rtnl_register(PF_BRIDGE, RTM_DELNEIGH, rtnl_fdb_del, NULL, NULL);
4139	rtnl_register(PF_BRIDGE, RTM_GETNEIGH, NULL, rtnl_fdb_dump, NULL);
4140
4141	rtnl_register(PF_BRIDGE, RTM_GETLINK, NULL, rtnl_bridge_getlink, NULL);
4142	rtnl_register(PF_BRIDGE, RTM_DELLINK, rtnl_bridge_dellink, NULL, NULL);
4143	rtnl_register(PF_BRIDGE, RTM_SETLINK, rtnl_bridge_setlink, NULL, NULL);
4144
4145	rtnl_register(PF_UNSPEC, RTM_GETSTATS, rtnl_stats_get, rtnl_stats_dump,
4146		      NULL);
4147}