2007-03-22 21:48:11 +03:00
# ifndef __NET_RTNETLINK_H
# define __NET_RTNETLINK_H
# include <linux/rtnetlink.h>
# include <net/netlink.h>
2013-03-21 11:45:29 +04:00
typedef int ( * rtnl_doit_func ) ( struct sk_buff * , struct nlmsghdr * ) ;
2007-03-22 21:48:11 +03:00
typedef int ( * rtnl_dumpit_func ) ( struct sk_buff * , struct netlink_callback * ) ;
2012-02-22 01:54:48 +04:00
typedef u16 ( * rtnl_calcit_func ) ( struct sk_buff * , struct nlmsghdr * ) ;
2007-03-22 21:48:11 +03:00
2013-09-22 21:32:23 +04:00
int __rtnl_register ( int protocol , int msgtype ,
rtnl_doit_func , rtnl_dumpit_func , rtnl_calcit_func ) ;
void rtnl_register ( int protocol , int msgtype ,
rtnl_doit_func , rtnl_dumpit_func , rtnl_calcit_func ) ;
int rtnl_unregister ( int protocol , int msgtype ) ;
void rtnl_unregister_all ( int protocol ) ;
2007-03-22 21:48:11 +03:00
2009-08-25 18:07:40 +04:00
static inline int rtnl_msg_family ( const struct nlmsghdr * nlh )
2007-03-26 10:24:24 +04:00
{
if ( nlmsg_len ( nlh ) > = sizeof ( struct rtgenmsg ) )
return ( ( struct rtgenmsg * ) nlmsg_data ( nlh ) ) - > rtgen_family ;
else
return AF_UNSPEC ;
}
2007-06-13 23:03:51 +04:00
/**
* struct rtnl_link_ops - rtnetlink link operations
*
* @ list : Used internally
* @ kind : Identifier
* @ maxtype : Highest device specific netlink attribute number
* @ policy : Netlink policy for device specific attribute validation
* @ validate : Optional validation function for netlink / changelink parameters
* @ priv_size : sizeof net_device private space
* @ setup : net_device setup function
* @ newlink : Function for configuring and registering a new device
* @ changelink : Function for changing parameters of an existing device
* @ dellink : Function to remove a device
* @ get_size : Function to calculate required room for dumping device
* specific netlink attributes
* @ fill_info : Function to dump device specific netlink attributes
2012-04-10 22:32:59 +04:00
* @ get_xstats_size : Function to calculate required room for dumping device
2007-06-13 23:03:51 +04:00
* specific statistics
* @ fill_xstats : Function to dump device specific statistics
2012-07-20 06:28:47 +04:00
* @ get_num_tx_queues : Function to determine number of transmit queues
* to create when creating a new device .
* @ get_num_rx_queues : Function to determine number of receive queues
* to create when creating a new device .
2015-01-15 17:11:16 +03:00
* @ get_link_net : Function to get the i / o netns of the device
2007-06-13 23:03:51 +04:00
*/
struct rtnl_link_ops {
struct list_head list ;
const char * kind ;
size_t priv_size ;
void ( * setup ) ( struct net_device * dev ) ;
int maxtype ;
const struct nla_policy * policy ;
int ( * validate ) ( struct nlattr * tb [ ] ,
struct nlattr * data [ ] ) ;
2009-11-08 11:53:51 +03:00
int ( * newlink ) ( struct net * src_net ,
struct net_device * dev ,
2007-06-13 23:03:51 +04:00
struct nlattr * tb [ ] ,
struct nlattr * data [ ] ) ;
int ( * changelink ) ( struct net_device * dev ,
struct nlattr * tb [ ] ,
struct nlattr * data [ ] ) ;
2009-10-27 10:06:36 +03:00
void ( * dellink ) ( struct net_device * dev ,
struct list_head * head ) ;
2007-06-13 23:03:51 +04:00
size_t ( * get_size ) ( const struct net_device * dev ) ;
int ( * fill_info ) ( struct sk_buff * skb ,
const struct net_device * dev ) ;
size_t ( * get_xstats_size ) ( const struct net_device * dev ) ;
int ( * fill_xstats ) ( struct sk_buff * skb ,
const struct net_device * dev ) ;
2012-07-20 06:28:47 +04:00
unsigned int ( * get_num_tx_queues ) ( void ) ;
unsigned int ( * get_num_rx_queues ) ( void ) ;
2014-01-22 12:05:55 +04:00
int slave_maxtype ;
const struct nla_policy * slave_policy ;
int ( * slave_validate ) ( struct nlattr * tb [ ] ,
struct nlattr * data [ ] ) ;
int ( * slave_changelink ) ( struct net_device * dev ,
struct net_device * slave_dev ,
struct nlattr * tb [ ] ,
struct nlattr * data [ ] ) ;
size_t ( * get_slave_size ) ( const struct net_device * dev ,
const struct net_device * slave_dev ) ;
int ( * fill_slave_info ) ( struct sk_buff * skb ,
const struct net_device * dev ,
const struct net_device * slave_dev ) ;
2015-01-15 17:11:16 +03:00
struct net * ( * get_link_net ) ( const struct net_device * dev ) ;
2007-06-13 23:03:51 +04:00
} ;
2013-09-22 21:32:23 +04:00
int __rtnl_link_register ( struct rtnl_link_ops * ops ) ;
void __rtnl_link_unregister ( struct rtnl_link_ops * ops ) ;
2007-06-13 23:03:51 +04:00
2013-09-22 21:32:23 +04:00
int rtnl_link_register ( struct rtnl_link_ops * ops ) ;
void rtnl_link_unregister ( struct rtnl_link_ops * ops ) ;
2007-06-13 23:03:51 +04:00
2010-11-16 07:30:14 +03:00
/**
* struct rtnl_af_ops - rtnetlink address family operations
*
* @ list : Used internally
* @ family : Address family
* @ fill_link_af : Function to fill IFLA_AF_SPEC with address family
* specific netlink attributes .
* @ get_link_af_size : Function to calculate size of address family specific
2012-04-10 22:32:59 +04:00
* netlink attributes .
2010-11-22 04:31:54 +03:00
* @ validate_link_af : Validate a IFLA_AF_SPEC attribute , must check attr
* for invalid configuration settings .
* @ set_link_af : Function to parse a IFLA_AF_SPEC attribute and modify
* net_device accordingly .
2010-11-16 07:30:14 +03:00
*/
struct rtnl_af_ops {
struct list_head list ;
int family ;
int ( * fill_link_af ) ( struct sk_buff * skb ,
const struct net_device * dev ) ;
size_t ( * get_link_af_size ) ( const struct net_device * dev ) ;
2010-11-22 04:31:54 +03:00
int ( * validate_link_af ) ( const struct net_device * dev ,
const struct nlattr * attr ) ;
int ( * set_link_af ) ( struct net_device * dev ,
const struct nlattr * attr ) ;
2010-11-16 07:30:14 +03:00
} ;
2013-09-22 21:32:23 +04:00
void __rtnl_af_unregister ( struct rtnl_af_ops * ops ) ;
2010-11-16 07:30:14 +03:00
2013-12-30 22:41:32 +04:00
void rtnl_af_register ( struct rtnl_af_ops * ops ) ;
2013-09-22 21:32:23 +04:00
void rtnl_af_unregister ( struct rtnl_af_ops * ops ) ;
2010-11-16 07:30:14 +03:00
2013-09-22 21:32:23 +04:00
struct net * rtnl_link_get_net ( struct net * src_net , struct nlattr * tb [ ] ) ;
struct net_device * rtnl_create_link ( struct net * net , char * ifname ,
2014-07-14 18:37:25 +04:00
unsigned char name_assign_type ,
2013-09-22 21:32:23 +04:00
const struct rtnl_link_ops * ops ,
struct nlattr * tb [ ] ) ;
int rtnl_configure_link ( struct net_device * dev , const struct ifinfomsg * ifm ) ;
2010-11-16 07:30:14 +03:00
2014-02-18 23:53:18 +04:00
int rtnl_nla_parse_ifla ( struct nlattr * * tb , const struct nlattr * head , int len ) ;
2007-08-09 09:16:38 +04:00
2007-06-13 23:03:51 +04:00
# define MODULE_ALIAS_RTNL_LINK(kind) MODULE_ALIAS("rtnl-link-" kind)
2007-03-22 21:48:11 +03:00
# endif