Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1480 commits) bonding: enable netpoll without checking link status xfrm: Refcount destination entry on xfrm_lookup net: introduce rx_handler results and logic around that bonding: get rid of IFF_SLAVE_INACTIVE netdev->priv_flag bonding: wrap slave state work net: get rid of multiple bond-related netdevice->priv_flags bonding: register slave pointer for rx_handler be2net: Bump up the version number be2net: Copyright notice change. Update to Emulex instead of ServerEngines e1000e: fix kconfig for crc32 dependency netfilter ebtables: fix xt_AUDIT to work with ebtables xen network backend driver bonding: Improve syslog message at device creation time bonding: Call netif_carrier_off after register_netdevice bonding: Incorrect TX queue offset net_sched: fix ip_tos2prio xfrm: fix __xfrm_route_forward() be2net: Fix UDP packet detected status in RX compl Phonet: fix aligned-mode pipe socket buffer header reserve netxen: support for GbE port settings ... Fix up conflicts in drivers/staging/brcm80211/brcmsmac/wl_mac80211.c with the staging updates.
This commit is contained in:
@@ -103,6 +103,8 @@
|
||||
#define AUDIT_BPRM_FCAPS 1321 /* Information about fcaps increasing perms */
|
||||
#define AUDIT_CAPSET 1322 /* Record showing argument to sys_capset */
|
||||
#define AUDIT_MMAP 1323 /* Record showing descriptor and flags in mmap */
|
||||
#define AUDIT_NETFILTER_PKT 1324 /* Packets traversing netfilter chains */
|
||||
#define AUDIT_NETFILTER_CFG 1325 /* Netfilter chain modifications */
|
||||
|
||||
#define AUDIT_AVC 1400 /* SE Linux avc denial or grant */
|
||||
#define AUDIT_SELINUX_ERR 1401 /* Internal SE Linux Errors */
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* cpu_rmap.c: CPU affinity reverse-map support
|
||||
* Copyright 2011 Solarflare Communications Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 as published
|
||||
* by the Free Software Foundation, incorporated herein by reference.
|
||||
*/
|
||||
|
||||
#include <linux/cpumask.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
/**
|
||||
* struct cpu_rmap - CPU affinity reverse-map
|
||||
* @size: Number of objects to be reverse-mapped
|
||||
* @used: Number of objects added
|
||||
* @obj: Pointer to array of object pointers
|
||||
* @near: For each CPU, the index and distance to the nearest object,
|
||||
* based on affinity masks
|
||||
*/
|
||||
struct cpu_rmap {
|
||||
u16 size, used;
|
||||
void **obj;
|
||||
struct {
|
||||
u16 index;
|
||||
u16 dist;
|
||||
} near[0];
|
||||
};
|
||||
#define CPU_RMAP_DIST_INF 0xffff
|
||||
|
||||
extern struct cpu_rmap *alloc_cpu_rmap(unsigned int size, gfp_t flags);
|
||||
|
||||
/**
|
||||
* free_cpu_rmap - free CPU affinity reverse-map
|
||||
* @rmap: Reverse-map allocated with alloc_cpu_rmap(), or %NULL
|
||||
*/
|
||||
static inline void free_cpu_rmap(struct cpu_rmap *rmap)
|
||||
{
|
||||
kfree(rmap);
|
||||
}
|
||||
|
||||
extern int cpu_rmap_add(struct cpu_rmap *rmap, void *obj);
|
||||
extern int cpu_rmap_update(struct cpu_rmap *rmap, u16 index,
|
||||
const struct cpumask *affinity);
|
||||
|
||||
static inline u16 cpu_rmap_lookup_index(struct cpu_rmap *rmap, unsigned int cpu)
|
||||
{
|
||||
return rmap->near[cpu].index;
|
||||
}
|
||||
|
||||
static inline void *cpu_rmap_lookup_obj(struct cpu_rmap *rmap, unsigned int cpu)
|
||||
{
|
||||
return rmap->obj[rmap->near[cpu].index];
|
||||
}
|
||||
|
||||
#ifdef CONFIG_GENERIC_HARDIRQS
|
||||
|
||||
/**
|
||||
* alloc_irq_cpu_rmap - allocate CPU affinity reverse-map for IRQs
|
||||
* @size: Number of objects to be mapped
|
||||
*
|
||||
* Must be called in process context.
|
||||
*/
|
||||
static inline struct cpu_rmap *alloc_irq_cpu_rmap(unsigned int size)
|
||||
{
|
||||
return alloc_cpu_rmap(size, GFP_KERNEL);
|
||||
}
|
||||
extern void free_irq_cpu_rmap(struct cpu_rmap *rmap);
|
||||
|
||||
extern int irq_cpu_rmap_add(struct cpu_rmap *rmap, int irq);
|
||||
|
||||
#endif
|
||||
+111
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2008, Intel Corporation.
|
||||
* Copyright (c) 2008-2011, Intel Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
@@ -25,9 +25,14 @@
|
||||
/* IEEE 802.1Qaz std supported values */
|
||||
#define IEEE_8021QAZ_MAX_TCS 8
|
||||
|
||||
#define IEEE_8021QAZ_TSA_STRICT 0
|
||||
#define IEEE_8021QAZ_TSA_CB_SHAPER 1
|
||||
#define IEEE_8021QAZ_TSA_ETS 2
|
||||
#define IEEE_8021QAZ_TSA_VENDOR 255
|
||||
|
||||
/* This structure contains the IEEE 802.1Qaz ETS managed object
|
||||
*
|
||||
* @willing: willing bit in ETS configuratin TLV
|
||||
* @willing: willing bit in ETS configuration TLV
|
||||
* @ets_cap: indicates supported capacity of ets feature
|
||||
* @cbs: credit based shaper ets algorithm supported
|
||||
* @tc_tx_bw: tc tx bandwidth indexed by traffic class
|
||||
@@ -82,6 +87,50 @@ struct ieee_pfc {
|
||||
__u64 indications[IEEE_8021QAZ_MAX_TCS];
|
||||
};
|
||||
|
||||
/* CEE DCBX std supported values */
|
||||
#define CEE_DCBX_MAX_PGS 8
|
||||
#define CEE_DCBX_MAX_PRIO 8
|
||||
|
||||
/**
|
||||
* struct cee_pg - CEE Priority-Group managed object
|
||||
*
|
||||
* @willing: willing bit in the PG tlv
|
||||
* @error: error bit in the PG tlv
|
||||
* @pg_en: enable bit of the PG feature
|
||||
* @tcs_supported: number of traffic classes supported
|
||||
* @pg_bw: bandwidth percentage for each priority group
|
||||
* @prio_pg: priority to PG mapping indexed by priority
|
||||
*/
|
||||
struct cee_pg {
|
||||
__u8 willing;
|
||||
__u8 error;
|
||||
__u8 pg_en;
|
||||
__u8 tcs_supported;
|
||||
__u8 pg_bw[CEE_DCBX_MAX_PGS];
|
||||
__u8 prio_pg[CEE_DCBX_MAX_PGS];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct cee_pfc - CEE PFC managed object
|
||||
*
|
||||
* @willing: willing bit in the PFC tlv
|
||||
* @error: error bit in the PFC tlv
|
||||
* @pfc_en: bitmap indicating pfc enabled traffic classes
|
||||
* @tcs_supported: number of traffic classes supported
|
||||
*/
|
||||
struct cee_pfc {
|
||||
__u8 willing;
|
||||
__u8 error;
|
||||
__u8 pfc_en;
|
||||
__u8 tcs_supported;
|
||||
};
|
||||
|
||||
/* IEEE 802.1Qaz std supported values */
|
||||
#define IEEE_8021QAZ_APP_SEL_ETHERTYPE 1
|
||||
#define IEEE_8021QAZ_APP_SEL_STREAM 2
|
||||
#define IEEE_8021QAZ_APP_SEL_DGRAM 3
|
||||
#define IEEE_8021QAZ_APP_SEL_ANY 4
|
||||
|
||||
/* This structure contains the IEEE 802.1Qaz APP managed object. This
|
||||
* object is also used for the CEE std as well. There is no difference
|
||||
* between the objects.
|
||||
@@ -105,6 +154,20 @@ struct dcb_app {
|
||||
__u16 protocol;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct dcb_peer_app_info - APP feature information sent by the peer
|
||||
*
|
||||
* @willing: willing bit in the peer APP tlv
|
||||
* @error: error bit in the peer APP tlv
|
||||
*
|
||||
* In addition to this information the full peer APP tlv also contains
|
||||
* a table of 'app_count' APP objects defined above.
|
||||
*/
|
||||
struct dcb_peer_app_info {
|
||||
__u8 willing;
|
||||
__u8 error;
|
||||
};
|
||||
|
||||
struct dcbmsg {
|
||||
__u8 dcb_family;
|
||||
__u8 cmd;
|
||||
@@ -139,6 +202,7 @@ struct dcbmsg {
|
||||
* @DCB_CMD_SDCBX: set DCBX engine configuration
|
||||
* @DCB_CMD_GFEATCFG: get DCBX features flags
|
||||
* @DCB_CMD_SFEATCFG: set DCBX features negotiation flags
|
||||
* @DCB_CMD_CEE_GET: get CEE aggregated configuration
|
||||
*/
|
||||
enum dcbnl_commands {
|
||||
DCB_CMD_UNDEFINED,
|
||||
@@ -181,6 +245,8 @@ enum dcbnl_commands {
|
||||
DCB_CMD_GFEATCFG,
|
||||
DCB_CMD_SFEATCFG,
|
||||
|
||||
DCB_CMD_CEE_GET,
|
||||
|
||||
__DCB_CMD_ENUM_MAX,
|
||||
DCB_CMD_MAX = __DCB_CMD_ENUM_MAX - 1,
|
||||
};
|
||||
@@ -203,6 +269,7 @@ enum dcbnl_commands {
|
||||
* @DCB_ATTR_IEEE: IEEE 802.1Qaz supported attributes (NLA_NESTED)
|
||||
* @DCB_ATTR_DCBX: DCBX engine configuration in the device (NLA_U8)
|
||||
* @DCB_ATTR_FEATCFG: DCBX features flags (NLA_NESTED)
|
||||
* @DCB_ATTR_CEE: CEE std supported attributes (NLA_NESTED)
|
||||
*/
|
||||
enum dcbnl_attrs {
|
||||
DCB_ATTR_UNDEFINED,
|
||||
@@ -226,15 +293,32 @@ enum dcbnl_attrs {
|
||||
DCB_ATTR_DCBX,
|
||||
DCB_ATTR_FEATCFG,
|
||||
|
||||
/* CEE nested attributes */
|
||||
DCB_ATTR_CEE,
|
||||
|
||||
__DCB_ATTR_ENUM_MAX,
|
||||
DCB_ATTR_MAX = __DCB_ATTR_ENUM_MAX - 1,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum ieee_attrs - IEEE 802.1Qaz get/set attributes
|
||||
*
|
||||
* @DCB_ATTR_IEEE_UNSPEC: unspecified
|
||||
* @DCB_ATTR_IEEE_ETS: negotiated ETS configuration
|
||||
* @DCB_ATTR_IEEE_PFC: negotiated PFC configuration
|
||||
* @DCB_ATTR_IEEE_APP_TABLE: negotiated APP configuration
|
||||
* @DCB_ATTR_IEEE_PEER_ETS: peer ETS configuration - get only
|
||||
* @DCB_ATTR_IEEE_PEER_PFC: peer PFC configuration - get only
|
||||
* @DCB_ATTR_IEEE_PEER_APP: peer APP tlv - get only
|
||||
*/
|
||||
enum ieee_attrs {
|
||||
DCB_ATTR_IEEE_UNSPEC,
|
||||
DCB_ATTR_IEEE_ETS,
|
||||
DCB_ATTR_IEEE_PFC,
|
||||
DCB_ATTR_IEEE_APP_TABLE,
|
||||
DCB_ATTR_IEEE_PEER_ETS,
|
||||
DCB_ATTR_IEEE_PEER_PFC,
|
||||
DCB_ATTR_IEEE_PEER_APP,
|
||||
__DCB_ATTR_IEEE_MAX
|
||||
};
|
||||
#define DCB_ATTR_IEEE_MAX (__DCB_ATTR_IEEE_MAX - 1)
|
||||
@@ -246,6 +330,31 @@ enum ieee_attrs_app {
|
||||
};
|
||||
#define DCB_ATTR_IEEE_APP_MAX (__DCB_ATTR_IEEE_APP_MAX - 1)
|
||||
|
||||
/**
|
||||
* enum cee_attrs - CEE DCBX get attributes
|
||||
*
|
||||
* @DCB_ATTR_CEE_UNSPEC: unspecified
|
||||
* @DCB_ATTR_CEE_PEER_PG: peer PG configuration - get only
|
||||
* @DCB_ATTR_CEE_PEER_PFC: peer PFC configuration - get only
|
||||
* @DCB_ATTR_CEE_PEER_APP: peer APP tlv - get only
|
||||
*/
|
||||
enum cee_attrs {
|
||||
DCB_ATTR_CEE_UNSPEC,
|
||||
DCB_ATTR_CEE_PEER_PG,
|
||||
DCB_ATTR_CEE_PEER_PFC,
|
||||
DCB_ATTR_CEE_PEER_APP_TABLE,
|
||||
__DCB_ATTR_CEE_MAX
|
||||
};
|
||||
#define DCB_ATTR_CEE_MAX (__DCB_ATTR_CEE_MAX - 1)
|
||||
|
||||
enum peer_app_attr {
|
||||
DCB_ATTR_CEE_PEER_APP_UNSPEC,
|
||||
DCB_ATTR_CEE_PEER_APP_INFO,
|
||||
DCB_ATTR_CEE_PEER_APP,
|
||||
__DCB_ATTR_CEE_PEER_APP_MAX
|
||||
};
|
||||
#define DCB_ATTR_CEE_PEER_APP_MAX (__DCB_ATTR_CEE_PEER_APP_MAX - 1)
|
||||
|
||||
/**
|
||||
* enum dcbnl_pfc_attrs - DCB Priority Flow Control user priority nested attrs
|
||||
*
|
||||
|
||||
@@ -279,8 +279,6 @@ enum dccp_state {
|
||||
DCCP_MAX_STATES
|
||||
};
|
||||
|
||||
#define DCCP_STATE_MASK 0x1f
|
||||
|
||||
enum {
|
||||
DCCPF_OPEN = TCPF_ESTABLISHED,
|
||||
DCCPF_REQUESTING = TCPF_SYN_SENT,
|
||||
|
||||
+90
-1
@@ -251,6 +251,7 @@ enum ethtool_stringset {
|
||||
ETH_SS_STATS,
|
||||
ETH_SS_PRIV_FLAGS,
|
||||
ETH_SS_NTUPLE_FILTERS,
|
||||
ETH_SS_FEATURES,
|
||||
};
|
||||
|
||||
/* for passing string sets for data tagging */
|
||||
@@ -523,6 +524,92 @@ struct ethtool_flash {
|
||||
char data[ETHTOOL_FLASH_MAX_FILENAME];
|
||||
};
|
||||
|
||||
/* for returning and changing feature sets */
|
||||
|
||||
/**
|
||||
* struct ethtool_get_features_block - block with state of 32 features
|
||||
* @available: mask of changeable features
|
||||
* @requested: mask of features requested to be enabled if possible
|
||||
* @active: mask of currently enabled features
|
||||
* @never_changed: mask of features not changeable for any device
|
||||
*/
|
||||
struct ethtool_get_features_block {
|
||||
__u32 available;
|
||||
__u32 requested;
|
||||
__u32 active;
|
||||
__u32 never_changed;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ethtool_gfeatures - command to get state of device's features
|
||||
* @cmd: command number = %ETHTOOL_GFEATURES
|
||||
* @size: in: number of elements in the features[] array;
|
||||
* out: number of elements in features[] needed to hold all features
|
||||
* @features: state of features
|
||||
*/
|
||||
struct ethtool_gfeatures {
|
||||
__u32 cmd;
|
||||
__u32 size;
|
||||
struct ethtool_get_features_block features[0];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ethtool_set_features_block - block with request for 32 features
|
||||
* @valid: mask of features to be changed
|
||||
* @requested: values of features to be changed
|
||||
*/
|
||||
struct ethtool_set_features_block {
|
||||
__u32 valid;
|
||||
__u32 requested;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ethtool_sfeatures - command to request change in device's features
|
||||
* @cmd: command number = %ETHTOOL_SFEATURES
|
||||
* @size: array size of the features[] array
|
||||
* @features: feature change masks
|
||||
*/
|
||||
struct ethtool_sfeatures {
|
||||
__u32 cmd;
|
||||
__u32 size;
|
||||
struct ethtool_set_features_block features[0];
|
||||
};
|
||||
|
||||
/*
|
||||
* %ETHTOOL_SFEATURES changes features present in features[].valid to the
|
||||
* values of corresponding bits in features[].requested. Bits in .requested
|
||||
* not set in .valid or not changeable are ignored.
|
||||
*
|
||||
* Returns %EINVAL when .valid contains undefined or never-changable bits
|
||||
* or size is not equal to required number of features words (32-bit blocks).
|
||||
* Returns >= 0 if request was completed; bits set in the value mean:
|
||||
* %ETHTOOL_F_UNSUPPORTED - there were bits set in .valid that are not
|
||||
* changeable (not present in %ETHTOOL_GFEATURES' features[].available)
|
||||
* those bits were ignored.
|
||||
* %ETHTOOL_F_WISH - some or all changes requested were recorded but the
|
||||
* resulting state of bits masked by .valid is not equal to .requested.
|
||||
* Probably there are other device-specific constraints on some features
|
||||
* in the set. When %ETHTOOL_F_UNSUPPORTED is set, .valid is considered
|
||||
* here as though ignored bits were cleared.
|
||||
* %ETHTOOL_F_COMPAT - some or all changes requested were made by calling
|
||||
* compatibility functions. Requested offload state cannot be properly
|
||||
* managed by kernel.
|
||||
*
|
||||
* Meaning of bits in the masks are obtained by %ETHTOOL_GSSET_INFO (number of
|
||||
* bits in the arrays - always multiple of 32) and %ETHTOOL_GSTRINGS commands
|
||||
* for ETH_SS_FEATURES string set. First entry in the table corresponds to least
|
||||
* significant bit in features[0] fields. Empty strings mark undefined features.
|
||||
*/
|
||||
enum ethtool_sfeatures_retval_bits {
|
||||
ETHTOOL_F_UNSUPPORTED__BIT,
|
||||
ETHTOOL_F_WISH__BIT,
|
||||
ETHTOOL_F_COMPAT__BIT,
|
||||
};
|
||||
|
||||
#define ETHTOOL_F_UNSUPPORTED (1 << ETHTOOL_F_UNSUPPORTED__BIT)
|
||||
#define ETHTOOL_F_WISH (1 << ETHTOOL_F_WISH__BIT)
|
||||
#define ETHTOOL_F_COMPAT (1 << ETHTOOL_F_COMPAT__BIT)
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/rculist.h>
|
||||
@@ -543,7 +630,6 @@ struct net_device;
|
||||
|
||||
/* Some generic methods drivers may use in their ethtool_ops */
|
||||
u32 ethtool_op_get_link(struct net_device *dev);
|
||||
u32 ethtool_op_get_rx_csum(struct net_device *dev);
|
||||
u32 ethtool_op_get_tx_csum(struct net_device *dev);
|
||||
int ethtool_op_set_tx_csum(struct net_device *dev, u32 data);
|
||||
int ethtool_op_set_tx_hw_csum(struct net_device *dev, u32 data);
|
||||
@@ -744,6 +830,9 @@ struct ethtool_ops {
|
||||
#define ETHTOOL_GRXFHINDIR 0x00000038 /* Get RX flow hash indir'n table */
|
||||
#define ETHTOOL_SRXFHINDIR 0x00000039 /* Set RX flow hash indir'n table */
|
||||
|
||||
#define ETHTOOL_GFEATURES 0x0000003a /* Get device offload settings */
|
||||
#define ETHTOOL_SFEATURES 0x0000003b /* Change device offload settings */
|
||||
|
||||
/* compatibility with older code */
|
||||
#define SPARC_ETH_GSET ETHTOOL_GSET
|
||||
#define SPARC_ETH_SSET ETHTOOL_SSET
|
||||
|
||||
@@ -183,10 +183,10 @@ extern void icmpv6_cleanup(void);
|
||||
extern void icmpv6_param_prob(struct sk_buff *skb,
|
||||
u8 code, int pos);
|
||||
|
||||
struct flowi;
|
||||
struct flowi6;
|
||||
struct in6_addr;
|
||||
extern void icmpv6_flow_init(struct sock *sk,
|
||||
struct flowi *fl,
|
||||
struct flowi6 *fl6,
|
||||
u8 type,
|
||||
const struct in6_addr *saddr,
|
||||
const struct in6_addr *daddr,
|
||||
|
||||
@@ -1325,6 +1325,9 @@ enum {
|
||||
/* Although the spec says 8 I'm seeing 6 in practice */
|
||||
#define IEEE80211_COUNTRY_IE_MIN_LEN 6
|
||||
|
||||
/* The Country String field of the element shall be 3 octets in length */
|
||||
#define IEEE80211_COUNTRY_STRING_LEN 3
|
||||
|
||||
/*
|
||||
* For regulatory extension stuff see IEEE 802.11-2007
|
||||
* Annex I (page 1141) and Annex J (page 1147). Also
|
||||
|
||||
+4
-5
@@ -71,11 +71,10 @@
|
||||
* release skb->dst
|
||||
*/
|
||||
#define IFF_DONT_BRIDGE 0x800 /* disallow bridging this ether dev */
|
||||
#define IFF_IN_NETPOLL 0x1000 /* whether we are processing netpoll */
|
||||
#define IFF_DISABLE_NETPOLL 0x2000 /* disable netpoll at run-time */
|
||||
#define IFF_MACVLAN_PORT 0x4000 /* device used as macvlan port */
|
||||
#define IFF_BRIDGE_PORT 0x8000 /* device used as bridge port */
|
||||
#define IFF_OVS_DATAPATH 0x10000 /* device used as Open vSwitch
|
||||
#define IFF_DISABLE_NETPOLL 0x1000 /* disable netpoll at run-time */
|
||||
#define IFF_MACVLAN_PORT 0x2000 /* device used as macvlan port */
|
||||
#define IFF_BRIDGE_PORT 0x4000 /* device used as bridge port */
|
||||
#define IFF_OVS_DATAPATH 0x8000 /* device used as Open vSwitch
|
||||
* datapath port */
|
||||
|
||||
#define IF_GET_IFACE 0x0001 /* for querying only */
|
||||
|
||||
@@ -135,6 +135,7 @@ enum {
|
||||
IFLA_VF_PORTS,
|
||||
IFLA_PORT_SELF,
|
||||
IFLA_AF_SPEC,
|
||||
IFLA_GROUP, /* Group the device belongs to */
|
||||
__IFLA_MAX
|
||||
};
|
||||
|
||||
|
||||
@@ -217,7 +217,7 @@ struct ip_mc_list {
|
||||
#define IGMPV3_QQIC(value) IGMPV3_EXP(0x80, 4, 3, value)
|
||||
#define IGMPV3_MRC(value) IGMPV3_EXP(0x80, 4, 3, value)
|
||||
|
||||
extern int ip_check_mc(struct in_device *dev, __be32 mc_addr, __be32 src_addr, u16 proto);
|
||||
extern int ip_check_mc_rcu(struct in_device *dev, __be32 mc_addr, __be32 src_addr, u16 proto);
|
||||
extern int igmp_rcv(struct sk_buff *);
|
||||
extern int ip_mc_join_group(struct sock *sk, struct ip_mreqn *imr);
|
||||
extern int ip_mc_leave_group(struct sock *sk, struct ip_mreqn *imr);
|
||||
|
||||
@@ -144,6 +144,7 @@ static inline void ipv4_devconf_setall(struct in_device *in_dev)
|
||||
#define IN_DEV_ARP_NOTIFY(in_dev) IN_DEV_MAXCONF((in_dev), ARP_NOTIFY)
|
||||
|
||||
struct in_ifaddr {
|
||||
struct hlist_node hash;
|
||||
struct in_ifaddr *ifa_next;
|
||||
struct in_device *ifa_dev;
|
||||
struct rcu_head rcu_head;
|
||||
|
||||
@@ -89,6 +89,14 @@
|
||||
#define IP_VS_CONN_F_TEMPLATE 0x1000 /* template, not connection */
|
||||
#define IP_VS_CONN_F_ONE_PACKET 0x2000 /* forward only one packet */
|
||||
|
||||
#define IP_VS_CONN_F_BACKUP_MASK (IP_VS_CONN_F_FWD_MASK | \
|
||||
IP_VS_CONN_F_NOOUTPUT | \
|
||||
IP_VS_CONN_F_INACTIVE | \
|
||||
IP_VS_CONN_F_SEQ_MASK | \
|
||||
IP_VS_CONN_F_NO_CPORT | \
|
||||
IP_VS_CONN_F_TEMPLATE \
|
||||
)
|
||||
|
||||
/* Flags that are not sent to backup server start from bit 16 */
|
||||
#define IP_VS_CONN_F_NFCT (1 << 16) /* use netfilter conntrack */
|
||||
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
#ifndef _MICREL_PHY_H
|
||||
#define _MICREL_PHY_H
|
||||
|
||||
#define MICREL_PHY_ID_MASK 0x00fffff0
|
||||
|
||||
#define PHY_ID_KSZ9021 0x00221611
|
||||
#define PHY_ID_KS8737 0x00221720
|
||||
#define PHY_ID_KS8041 0x00221510
|
||||
#define PHY_ID_KS8051 0x00221550
|
||||
/* both for ks8001 Rev. A/B, and for ks8721 Rev 3. */
|
||||
#define PHY_ID_KS8001 0x0022161A
|
||||
|
||||
/* struct phy_device dev_flags definitions */
|
||||
#define MICREL_PHY_50MHZ_CLK 0x00000001
|
||||
|
||||
#endif /* _MICREL_PHY_H */
|
||||
+2
-1
@@ -118,6 +118,7 @@ enum sock_shutdown_cmd {
|
||||
};
|
||||
|
||||
struct socket_wq {
|
||||
/* Note: wait MUST be first field of socket_wq */
|
||||
wait_queue_head_t wait;
|
||||
struct fasync_struct *fasync_list;
|
||||
struct rcu_head rcu;
|
||||
@@ -142,7 +143,7 @@ struct socket {
|
||||
|
||||
unsigned long flags;
|
||||
|
||||
struct socket_wq *wq;
|
||||
struct socket_wq __rcu *wq;
|
||||
|
||||
struct file *file;
|
||||
struct sock *sk;
|
||||
|
||||
+277
-28
@@ -138,6 +138,9 @@ static inline bool dev_xmit_complete(int rc)
|
||||
|
||||
#define MAX_ADDR_LEN 32 /* Largest hardware address length */
|
||||
|
||||
/* Initial net device group. All devices belong to group 0 by default. */
|
||||
#define INIT_NETDEV_GROUP 0
|
||||
|
||||
#ifdef __KERNEL__
|
||||
/*
|
||||
* Compute the worst case header length according to the protocols
|
||||
@@ -387,7 +390,55 @@ enum gro_result {
|
||||
};
|
||||
typedef enum gro_result gro_result_t;
|
||||
|
||||
typedef struct sk_buff *rx_handler_func_t(struct sk_buff *skb);
|
||||
/*
|
||||
* enum rx_handler_result - Possible return values for rx_handlers.
|
||||
* @RX_HANDLER_CONSUMED: skb was consumed by rx_handler, do not process it
|
||||
* further.
|
||||
* @RX_HANDLER_ANOTHER: Do another round in receive path. This is indicated in
|
||||
* case skb->dev was changed by rx_handler.
|
||||
* @RX_HANDLER_EXACT: Force exact delivery, no wildcard.
|
||||
* @RX_HANDLER_PASS: Do nothing, passe the skb as if no rx_handler was called.
|
||||
*
|
||||
* rx_handlers are functions called from inside __netif_receive_skb(), to do
|
||||
* special processing of the skb, prior to delivery to protocol handlers.
|
||||
*
|
||||
* Currently, a net_device can only have a single rx_handler registered. Trying
|
||||
* to register a second rx_handler will return -EBUSY.
|
||||
*
|
||||
* To register a rx_handler on a net_device, use netdev_rx_handler_register().
|
||||
* To unregister a rx_handler on a net_device, use
|
||||
* netdev_rx_handler_unregister().
|
||||
*
|
||||
* Upon return, rx_handler is expected to tell __netif_receive_skb() what to
|
||||
* do with the skb.
|
||||
*
|
||||
* If the rx_handler consumed to skb in some way, it should return
|
||||
* RX_HANDLER_CONSUMED. This is appropriate when the rx_handler arranged for
|
||||
* the skb to be delivered in some other ways.
|
||||
*
|
||||
* If the rx_handler changed skb->dev, to divert the skb to another
|
||||
* net_device, it should return RX_HANDLER_ANOTHER. The rx_handler for the
|
||||
* new device will be called if it exists.
|
||||
*
|
||||
* If the rx_handler consider the skb should be ignored, it should return
|
||||
* RX_HANDLER_EXACT. The skb will only be delivered to protocol handlers that
|
||||
* are registred on exact device (ptype->dev == skb->dev).
|
||||
*
|
||||
* If the rx_handler didn't changed skb->dev, but want the skb to be normally
|
||||
* delivered, it should return RX_HANDLER_PASS.
|
||||
*
|
||||
* A device without a registered rx_handler will behave as if rx_handler
|
||||
* returned RX_HANDLER_PASS.
|
||||
*/
|
||||
|
||||
enum rx_handler_result {
|
||||
RX_HANDLER_CONSUMED,
|
||||
RX_HANDLER_ANOTHER,
|
||||
RX_HANDLER_EXACT,
|
||||
RX_HANDLER_PASS,
|
||||
};
|
||||
typedef enum rx_handler_result rx_handler_result_t;
|
||||
typedef rx_handler_result_t rx_handler_func_t(struct sk_buff **pskb);
|
||||
|
||||
extern void __napi_schedule(struct napi_struct *n);
|
||||
|
||||
@@ -551,14 +602,16 @@ struct rps_map {
|
||||
#define RPS_MAP_SIZE(_num) (sizeof(struct rps_map) + (_num * sizeof(u16)))
|
||||
|
||||
/*
|
||||
* The rps_dev_flow structure contains the mapping of a flow to a CPU and the
|
||||
* tail pointer for that CPU's input queue at the time of last enqueue.
|
||||
* The rps_dev_flow structure contains the mapping of a flow to a CPU, the
|
||||
* tail pointer for that CPU's input queue at the time of last enqueue, and
|
||||
* a hardware filter index.
|
||||
*/
|
||||
struct rps_dev_flow {
|
||||
u16 cpu;
|
||||
u16 fill;
|
||||
u16 filter;
|
||||
unsigned int last_qtail;
|
||||
};
|
||||
#define RPS_NO_FILTER 0xffff
|
||||
|
||||
/*
|
||||
* The rps_dev_flow_table structure contains a table of flow mappings.
|
||||
@@ -608,6 +661,11 @@ static inline void rps_reset_sock_flow(struct rps_sock_flow_table *table,
|
||||
|
||||
extern struct rps_sock_flow_table __rcu *rps_sock_flow_table;
|
||||
|
||||
#ifdef CONFIG_RFS_ACCEL
|
||||
extern bool rps_may_expire_flow(struct net_device *dev, u16 rxq_index,
|
||||
u32 flow_id, u16 filter_id);
|
||||
#endif
|
||||
|
||||
/* This structure contains an instance of an RX queue. */
|
||||
struct netdev_rx_queue {
|
||||
struct rps_map __rcu *rps_map;
|
||||
@@ -643,6 +701,14 @@ struct xps_dev_maps {
|
||||
(nr_cpu_ids * sizeof(struct xps_map *)))
|
||||
#endif /* CONFIG_XPS */
|
||||
|
||||
#define TC_MAX_QUEUE 16
|
||||
#define TC_BITMASK 15
|
||||
/* HW offloaded queuing disciplines txq count and offset maps */
|
||||
struct netdev_tc_txq {
|
||||
u16 count;
|
||||
u16 offset;
|
||||
};
|
||||
|
||||
/*
|
||||
* This structure defines the management hooks for network devices.
|
||||
* The following hooks can be defined; unless noted otherwise, they are
|
||||
@@ -753,6 +819,74 @@ struct xps_dev_maps {
|
||||
* int (*ndo_set_vf_port)(struct net_device *dev, int vf,
|
||||
* struct nlattr *port[]);
|
||||
* int (*ndo_get_vf_port)(struct net_device *dev, int vf, struct sk_buff *skb);
|
||||
* int (*ndo_setup_tc)(struct net_device *dev, u8 tc)
|
||||
* Called to setup 'tc' number of traffic classes in the net device. This
|
||||
* is always called from the stack with the rtnl lock held and netif tx
|
||||
* queues stopped. This allows the netdevice to perform queue management
|
||||
* safely.
|
||||
*
|
||||
* Fiber Channel over Ethernet (FCoE) offload functions.
|
||||
* int (*ndo_fcoe_enable)(struct net_device *dev);
|
||||
* Called when the FCoE protocol stack wants to start using LLD for FCoE
|
||||
* so the underlying device can perform whatever needed configuration or
|
||||
* initialization to support acceleration of FCoE traffic.
|
||||
*
|
||||
* int (*ndo_fcoe_disable)(struct net_device *dev);
|
||||
* Called when the FCoE protocol stack wants to stop using LLD for FCoE
|
||||
* so the underlying device can perform whatever needed clean-ups to
|
||||
* stop supporting acceleration of FCoE traffic.
|
||||
*
|
||||
* int (*ndo_fcoe_ddp_setup)(struct net_device *dev, u16 xid,
|
||||
* struct scatterlist *sgl, unsigned int sgc);
|
||||
* Called when the FCoE Initiator wants to initialize an I/O that
|
||||
* is a possible candidate for Direct Data Placement (DDP). The LLD can
|
||||
* perform necessary setup and returns 1 to indicate the device is set up
|
||||
* successfully to perform DDP on this I/O, otherwise this returns 0.
|
||||
*
|
||||
* int (*ndo_fcoe_ddp_done)(struct net_device *dev, u16 xid);
|
||||
* Called when the FCoE Initiator/Target is done with the DDPed I/O as
|
||||
* indicated by the FC exchange id 'xid', so the underlying device can
|
||||
* clean up and reuse resources for later DDP requests.
|
||||
*
|
||||
* int (*ndo_fcoe_ddp_target)(struct net_device *dev, u16 xid,
|
||||
* struct scatterlist *sgl, unsigned int sgc);
|
||||
* Called when the FCoE Target wants to initialize an I/O that
|
||||
* is a possible candidate for Direct Data Placement (DDP). The LLD can
|
||||
* perform necessary setup and returns 1 to indicate the device is set up
|
||||
* successfully to perform DDP on this I/O, otherwise this returns 0.
|
||||
*
|
||||
* int (*ndo_fcoe_get_wwn)(struct net_device *dev, u64 *wwn, int type);
|
||||
* Called when the underlying device wants to override default World Wide
|
||||
* Name (WWN) generation mechanism in FCoE protocol stack to pass its own
|
||||
* World Wide Port Name (WWPN) or World Wide Node Name (WWNN) to the FCoE
|
||||
* protocol stack to use.
|
||||
*
|
||||
* RFS acceleration.
|
||||
* int (*ndo_rx_flow_steer)(struct net_device *dev, const struct sk_buff *skb,
|
||||
* u16 rxq_index, u32 flow_id);
|
||||
* Set hardware filter for RFS. rxq_index is the target queue index;
|
||||
* flow_id is a flow ID to be passed to rps_may_expire_flow() later.
|
||||
* Return the filter ID on success, or a negative error code.
|
||||
*
|
||||
* Slave management functions (for bridge, bonding, etc). User should
|
||||
* call netdev_set_master() to set dev->master properly.
|
||||
* int (*ndo_add_slave)(struct net_device *dev, struct net_device *slave_dev);
|
||||
* Called to make another netdev an underling.
|
||||
*
|
||||
* int (*ndo_del_slave)(struct net_device *dev, struct net_device *slave_dev);
|
||||
* Called to release previously enslaved netdev.
|
||||
*
|
||||
* Feature/offload setting functions.
|
||||
* u32 (*ndo_fix_features)(struct net_device *dev, u32 features);
|
||||
* Adjusts the requested feature flags according to device-specific
|
||||
* constraints, and returns the resulting flags. Must not modify
|
||||
* the device state.
|
||||
*
|
||||
* int (*ndo_set_features)(struct net_device *dev, u32 features);
|
||||
* Called to update device configuration to new features. Passed
|
||||
* feature set might be less than what was returned by ndo_fix_features()).
|
||||
* Must return >0 or -errno if it changed dev->features itself.
|
||||
*
|
||||
*/
|
||||
#define HAVE_NET_DEVICE_OPS
|
||||
struct net_device_ops {
|
||||
@@ -811,6 +945,7 @@ struct net_device_ops {
|
||||
struct nlattr *port[]);
|
||||
int (*ndo_get_vf_port)(struct net_device *dev,
|
||||
int vf, struct sk_buff *skb);
|
||||
int (*ndo_setup_tc)(struct net_device *dev, u8 tc);
|
||||
#if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE)
|
||||
int (*ndo_fcoe_enable)(struct net_device *dev);
|
||||
int (*ndo_fcoe_disable)(struct net_device *dev);
|
||||
@@ -820,11 +955,29 @@ struct net_device_ops {
|
||||
unsigned int sgc);
|
||||
int (*ndo_fcoe_ddp_done)(struct net_device *dev,
|
||||
u16 xid);
|
||||
int (*ndo_fcoe_ddp_target)(struct net_device *dev,
|
||||
u16 xid,
|
||||
struct scatterlist *sgl,
|
||||
unsigned int sgc);
|
||||
#define NETDEV_FCOE_WWNN 0
|
||||
#define NETDEV_FCOE_WWPN 1
|
||||
int (*ndo_fcoe_get_wwn)(struct net_device *dev,
|
||||
u64 *wwn, int type);
|
||||
#endif
|
||||
#ifdef CONFIG_RFS_ACCEL
|
||||
int (*ndo_rx_flow_steer)(struct net_device *dev,
|
||||
const struct sk_buff *skb,
|
||||
u16 rxq_index,
|
||||
u32 flow_id);
|
||||
#endif
|
||||
int (*ndo_add_slave)(struct net_device *dev,
|
||||
struct net_device *slave_dev);
|
||||
int (*ndo_del_slave)(struct net_device *dev,
|
||||
struct net_device *slave_dev);
|
||||
u32 (*ndo_fix_features)(struct net_device *dev,
|
||||
u32 features);
|
||||
int (*ndo_set_features)(struct net_device *dev,
|
||||
u32 features);
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -876,8 +1029,18 @@ struct net_device {
|
||||
struct list_head napi_list;
|
||||
struct list_head unreg_list;
|
||||
|
||||
/* Net device features */
|
||||
unsigned long features;
|
||||
/* currently active device features */
|
||||
u32 features;
|
||||
/* user-changeable features */
|
||||
u32 hw_features;
|
||||
/* user-requested features */
|
||||
u32 wanted_features;
|
||||
/* VLAN feature mask */
|
||||
u32 vlan_features;
|
||||
|
||||
/* Net device feature bits; if you change something,
|
||||
* also update netdev_features_strings[] in ethtool.c */
|
||||
|
||||
#define NETIF_F_SG 1 /* Scatter/gather IO. */
|
||||
#define NETIF_F_IP_CSUM 2 /* Can checksum TCP/UDP over IPv4. */
|
||||
#define NETIF_F_NO_CSUM 4 /* Does not require checksum. F.e. loopack. */
|
||||
@@ -902,6 +1065,7 @@ struct net_device {
|
||||
#define NETIF_F_FCOE_MTU (1 << 26) /* Supports max FCoE MTU, 2158 bytes*/
|
||||
#define NETIF_F_NTUPLE (1 << 27) /* N-tuple filters supported */
|
||||
#define NETIF_F_RXHASH (1 << 28) /* Receive hashing offload */
|
||||
#define NETIF_F_RXCSUM (1 << 29) /* Receive checksumming offload */
|
||||
|
||||
/* Segmentation offload features */
|
||||
#define NETIF_F_GSO_SHIFT 16
|
||||
@@ -913,6 +1077,12 @@ struct net_device {
|
||||
#define NETIF_F_TSO6 (SKB_GSO_TCPV6 << NETIF_F_GSO_SHIFT)
|
||||
#define NETIF_F_FSO (SKB_GSO_FCOE << NETIF_F_GSO_SHIFT)
|
||||
|
||||
/* Features valid for ethtool to change */
|
||||
/* = all defined minus driver/device-class-related */
|
||||
#define NETIF_F_NEVER_CHANGE (NETIF_F_HIGHDMA | NETIF_F_VLAN_CHALLENGED | \
|
||||
NETIF_F_LLTX | NETIF_F_NETNS_LOCAL)
|
||||
#define NETIF_F_ETHTOOL_BITS (0x3f3fffff & ~NETIF_F_NEVER_CHANGE)
|
||||
|
||||
/* List of features with software fallbacks. */
|
||||
#define NETIF_F_GSO_SOFTWARE (NETIF_F_TSO | NETIF_F_TSO_ECN | \
|
||||
NETIF_F_TSO6 | NETIF_F_UFO)
|
||||
@@ -923,6 +1093,12 @@ struct net_device {
|
||||
#define NETIF_F_V6_CSUM (NETIF_F_GEN_CSUM | NETIF_F_IPV6_CSUM)
|
||||
#define NETIF_F_ALL_CSUM (NETIF_F_V4_CSUM | NETIF_F_V6_CSUM)
|
||||
|
||||
#define NETIF_F_ALL_TSO (NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_TSO_ECN)
|
||||
|
||||
#define NETIF_F_ALL_TX_OFFLOADS (NETIF_F_ALL_CSUM | NETIF_F_SG | \
|
||||
NETIF_F_FRAGLIST | NETIF_F_ALL_TSO | \
|
||||
NETIF_F_SCTP_CSUM | NETIF_F_FCOE_CRC)
|
||||
|
||||
/*
|
||||
* If one device supports one of these features, then enable them
|
||||
* for all in netdev_increment_features.
|
||||
@@ -931,6 +1107,9 @@ struct net_device {
|
||||
NETIF_F_SG | NETIF_F_HIGHDMA | \
|
||||
NETIF_F_FRAGLIST)
|
||||
|
||||
/* changeable features with no special hardware requirements */
|
||||
#define NETIF_F_SOFT_FEATURES (NETIF_F_GSO | NETIF_F_GRO)
|
||||
|
||||
/* Interface index. Unique device identifier */
|
||||
int ifindex;
|
||||
int iflink;
|
||||
@@ -1039,6 +1218,13 @@ struct net_device {
|
||||
|
||||
/* Number of RX queues currently active in device */
|
||||
unsigned int real_num_rx_queues;
|
||||
|
||||
#ifdef CONFIG_RFS_ACCEL
|
||||
/* CPU reverse-mapping for RX completion interrupts, indexed
|
||||
* by RX queue number. Assigned by driver. This must only be
|
||||
* set if the ndo_rx_flow_steer operation is defined. */
|
||||
struct cpu_rmap *rx_cpu_rmap;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
rx_handler_func_t __rcu *rx_handler;
|
||||
@@ -1132,9 +1318,6 @@ struct net_device {
|
||||
/* rtnetlink link ops */
|
||||
const struct rtnl_link_ops *rtnl_link_ops;
|
||||
|
||||
/* VLAN feature mask */
|
||||
unsigned long vlan_features;
|
||||
|
||||
/* for setting kernel sock attribute on TCP connection setup */
|
||||
#define GSO_MAX_SIZE 65536
|
||||
unsigned int gso_max_size;
|
||||
@@ -1143,6 +1326,9 @@ struct net_device {
|
||||
/* Data Center Bridging netlink ops */
|
||||
const struct dcbnl_rtnl_ops *dcbnl_ops;
|
||||
#endif
|
||||
u8 num_tc;
|
||||
struct netdev_tc_txq tc_to_txq[TC_MAX_QUEUE];
|
||||
u8 prio_tc_map[TC_BITMASK + 1];
|
||||
|
||||
#if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE)
|
||||
/* max exchange id for FCoE LRO by ddp */
|
||||
@@ -1153,11 +1339,65 @@ struct net_device {
|
||||
|
||||
/* phy device may attach itself for hardware timestamping */
|
||||
struct phy_device *phydev;
|
||||
|
||||
/* group the device belongs to */
|
||||
int group;
|
||||
};
|
||||
#define to_net_dev(d) container_of(d, struct net_device, dev)
|
||||
|
||||
#define NETDEV_ALIGN 32
|
||||
|
||||
static inline
|
||||
int netdev_get_prio_tc_map(const struct net_device *dev, u32 prio)
|
||||
{
|
||||
return dev->prio_tc_map[prio & TC_BITMASK];
|
||||
}
|
||||
|
||||
static inline
|
||||
int netdev_set_prio_tc_map(struct net_device *dev, u8 prio, u8 tc)
|
||||
{
|
||||
if (tc >= dev->num_tc)
|
||||
return -EINVAL;
|
||||
|
||||
dev->prio_tc_map[prio & TC_BITMASK] = tc & TC_BITMASK;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline
|
||||
void netdev_reset_tc(struct net_device *dev)
|
||||
{
|
||||
dev->num_tc = 0;
|
||||
memset(dev->tc_to_txq, 0, sizeof(dev->tc_to_txq));
|
||||
memset(dev->prio_tc_map, 0, sizeof(dev->prio_tc_map));
|
||||
}
|
||||
|
||||
static inline
|
||||
int netdev_set_tc_queue(struct net_device *dev, u8 tc, u16 count, u16 offset)
|
||||
{
|
||||
if (tc >= dev->num_tc)
|
||||
return -EINVAL;
|
||||
|
||||
dev->tc_to_txq[tc].count = count;
|
||||
dev->tc_to_txq[tc].offset = offset;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline
|
||||
int netdev_set_num_tc(struct net_device *dev, u8 num_tc)
|
||||
{
|
||||
if (num_tc > TC_MAX_QUEUE)
|
||||
return -EINVAL;
|
||||
|
||||
dev->num_tc = num_tc;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline
|
||||
int netdev_get_num_tc(struct net_device *dev)
|
||||
{
|
||||
return dev->num_tc;
|
||||
}
|
||||
|
||||
static inline
|
||||
struct netdev_queue *netdev_get_tx_queue(const struct net_device *dev,
|
||||
unsigned int index)
|
||||
@@ -1300,7 +1540,7 @@ struct packet_type {
|
||||
struct packet_type *,
|
||||
struct net_device *);
|
||||
struct sk_buff *(*gso_segment)(struct sk_buff *skb,
|
||||
int features);
|
||||
u32 features);
|
||||
int (*gso_send_check)(struct sk_buff *skb);
|
||||
struct sk_buff **(*gro_receive)(struct sk_buff **head,
|
||||
struct sk_buff *skb);
|
||||
@@ -1345,7 +1585,7 @@ static inline struct net_device *next_net_device_rcu(struct net_device *dev)
|
||||
struct net *net;
|
||||
|
||||
net = dev_net(dev);
|
||||
lh = rcu_dereference(dev->dev_list.next);
|
||||
lh = rcu_dereference(list_next_rcu(&dev->dev_list));
|
||||
return lh == &net->dev_base_head ? NULL : net_device_entry(lh);
|
||||
}
|
||||
|
||||
@@ -1355,6 +1595,13 @@ static inline struct net_device *first_net_device(struct net *net)
|
||||
net_device_entry(net->dev_base_head.next);
|
||||
}
|
||||
|
||||
static inline struct net_device *first_net_device_rcu(struct net *net)
|
||||
{
|
||||
struct list_head *lh = rcu_dereference(list_next_rcu(&net->dev_base_head));
|
||||
|
||||
return lh == &net->dev_base_head ? NULL : net_device_entry(lh);
|
||||
}
|
||||
|
||||
extern int netdev_boot_setup_check(struct net_device *dev);
|
||||
extern unsigned long netdev_boot_base(const char *prefix, int unit);
|
||||
extern struct net_device *dev_getbyhwaddr_rcu(struct net *net, unsigned short type,
|
||||
@@ -1606,8 +1853,7 @@ static inline void netif_tx_wake_all_queues(struct net_device *dev)
|
||||
static inline void netif_tx_stop_queue(struct netdev_queue *dev_queue)
|
||||
{
|
||||
if (WARN_ON(!dev_queue)) {
|
||||
printk(KERN_INFO "netif_stop_queue() cannot be called before "
|
||||
"register_netdev()");
|
||||
pr_info("netif_stop_queue() cannot be called before register_netdev()\n");
|
||||
return;
|
||||
}
|
||||
set_bit(__QUEUE_STATE_XOFF, &dev_queue->state);
|
||||
@@ -1844,6 +2090,7 @@ extern int dev_set_alias(struct net_device *, const char *, size_t);
|
||||
extern int dev_change_net_namespace(struct net_device *,
|
||||
struct net *, const char *);
|
||||
extern int dev_set_mtu(struct net_device *, int);
|
||||
extern void dev_set_group(struct net_device *, int);
|
||||
extern int dev_set_mac_address(struct net_device *,
|
||||
struct sockaddr *);
|
||||
extern int dev_hard_start_xmit(struct sk_buff *skb,
|
||||
@@ -2267,8 +2514,10 @@ extern int netdev_max_backlog;
|
||||
extern int netdev_tstamp_prequeue;
|
||||
extern int weight_p;
|
||||
extern int netdev_set_master(struct net_device *dev, struct net_device *master);
|
||||
extern int netdev_set_bond_master(struct net_device *dev,
|
||||
struct net_device *master);
|
||||
extern int skb_checksum_help(struct sk_buff *skb);
|
||||
extern struct sk_buff *skb_gso_segment(struct sk_buff *skb, int features);
|
||||
extern struct sk_buff *skb_gso_segment(struct sk_buff *skb, u32 features);
|
||||
#ifdef CONFIG_BUG
|
||||
extern void netdev_rx_csum_fault(struct net_device *dev);
|
||||
#else
|
||||
@@ -2295,22 +2544,26 @@ extern char *netdev_drivername(const struct net_device *dev, char *buffer, int l
|
||||
|
||||
extern void linkwatch_run_queue(void);
|
||||
|
||||
unsigned long netdev_increment_features(unsigned long all, unsigned long one,
|
||||
unsigned long mask);
|
||||
unsigned long netdev_fix_features(unsigned long features, const char *name);
|
||||
static inline u32 netdev_get_wanted_features(struct net_device *dev)
|
||||
{
|
||||
return (dev->features & ~dev->hw_features) | dev->wanted_features;
|
||||
}
|
||||
u32 netdev_increment_features(u32 all, u32 one, u32 mask);
|
||||
u32 netdev_fix_features(struct net_device *dev, u32 features);
|
||||
void netdev_update_features(struct net_device *dev);
|
||||
|
||||
void netif_stacked_transfer_operstate(const struct net_device *rootdev,
|
||||
struct net_device *dev);
|
||||
|
||||
int netif_skb_features(struct sk_buff *skb);
|
||||
u32 netif_skb_features(struct sk_buff *skb);
|
||||
|
||||
static inline int net_gso_ok(int features, int gso_type)
|
||||
static inline int net_gso_ok(u32 features, int gso_type)
|
||||
{
|
||||
int feature = gso_type << NETIF_F_GSO_SHIFT;
|
||||
return (features & feature) == feature;
|
||||
}
|
||||
|
||||
static inline int skb_gso_ok(struct sk_buff *skb, int features)
|
||||
static inline int skb_gso_ok(struct sk_buff *skb, u32 features)
|
||||
{
|
||||
return net_gso_ok(features, skb_shinfo(skb)->gso_type) &&
|
||||
(!skb_has_frag_list(skb) || (features & NETIF_F_FRAGLIST));
|
||||
@@ -2328,15 +2581,9 @@ static inline void netif_set_gso_max_size(struct net_device *dev,
|
||||
dev->gso_max_size = size;
|
||||
}
|
||||
|
||||
extern int __skb_bond_should_drop(struct sk_buff *skb,
|
||||
struct net_device *master);
|
||||
|
||||
static inline int skb_bond_should_drop(struct sk_buff *skb,
|
||||
struct net_device *master)
|
||||
static inline int netif_is_bond_slave(struct net_device *dev)
|
||||
{
|
||||
if (master)
|
||||
return __skb_bond_should_drop(skb, master);
|
||||
return 0;
|
||||
return dev->flags & IFF_SLAVE && dev->priv_flags & IFF_BONDING;
|
||||
}
|
||||
|
||||
extern struct pernet_operations __net_initdata loopback_net_ops;
|
||||
@@ -2351,6 +2598,8 @@ static inline int dev_ethtool_get_settings(struct net_device *dev,
|
||||
|
||||
static inline u32 dev_ethtool_get_rx_csum(struct net_device *dev)
|
||||
{
|
||||
if (dev->hw_features & NETIF_F_RXCSUM)
|
||||
return !!(dev->features & NETIF_F_RXCSUM);
|
||||
if (!dev->ethtool_ops || !dev->ethtool_ops->get_rx_csum)
|
||||
return 0;
|
||||
return dev->ethtool_ops->get_rx_csum(dev);
|
||||
|
||||
@@ -24,16 +24,20 @@
|
||||
#define NF_MAX_VERDICT NF_STOP
|
||||
|
||||
/* we overload the higher bits for encoding auxiliary data such as the queue
|
||||
* number. Not nice, but better than additional function arguments. */
|
||||
#define NF_VERDICT_MASK 0x0000ffff
|
||||
#define NF_VERDICT_BITS 16
|
||||
* number or errno values. Not nice, but better than additional function
|
||||
* arguments. */
|
||||
#define NF_VERDICT_MASK 0x000000ff
|
||||
|
||||
/* extra verdict flags have mask 0x0000ff00 */
|
||||
#define NF_VERDICT_FLAG_QUEUE_BYPASS 0x00008000
|
||||
|
||||
/* queue number (NF_QUEUE) or errno (NF_DROP) */
|
||||
#define NF_VERDICT_QMASK 0xffff0000
|
||||
#define NF_VERDICT_QBITS 16
|
||||
|
||||
#define NF_QUEUE_NR(x) ((((x) << NF_VERDICT_BITS) & NF_VERDICT_QMASK) | NF_QUEUE)
|
||||
#define NF_QUEUE_NR(x) ((((x) << 16) & NF_VERDICT_QMASK) | NF_QUEUE)
|
||||
|
||||
#define NF_DROP_ERR(x) (((-x) << NF_VERDICT_BITS) | NF_DROP)
|
||||
#define NF_DROP_ERR(x) (((-x) << 16) | NF_DROP)
|
||||
|
||||
/* only for userspace compatibility */
|
||||
#ifndef __KERNEL__
|
||||
@@ -41,6 +45,9 @@
|
||||
<= 0x2000 is used for protocol-flags. */
|
||||
#define NFC_UNKNOWN 0x4000
|
||||
#define NFC_ALTERED 0x8000
|
||||
|
||||
/* NF_VERDICT_BITS should be 8 now, but userspace might break if this changes */
|
||||
#define NF_VERDICT_BITS 16
|
||||
#endif
|
||||
|
||||
enum nf_inet_hooks {
|
||||
@@ -72,6 +79,10 @@ union nf_inet_addr {
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#ifdef CONFIG_NETFILTER
|
||||
static inline int NF_DROP_GETERR(int verdict)
|
||||
{
|
||||
return -(verdict >> NF_VERDICT_QBITS);
|
||||
}
|
||||
|
||||
static inline int nf_inet_addr_cmp(const union nf_inet_addr *a1,
|
||||
const union nf_inet_addr *a2)
|
||||
@@ -267,7 +278,7 @@ struct nf_afinfo {
|
||||
int route_key_size;
|
||||
};
|
||||
|
||||
extern const struct nf_afinfo *nf_afinfo[NFPROTO_NUMPROTO];
|
||||
extern const struct nf_afinfo __rcu *nf_afinfo[NFPROTO_NUMPROTO];
|
||||
static inline const struct nf_afinfo *nf_get_afinfo(unsigned short family)
|
||||
{
|
||||
return rcu_dereference(nf_afinfo[family]);
|
||||
@@ -357,9 +368,9 @@ nf_nat_decode_session(struct sk_buff *skb, struct flowi *fl, u_int8_t family)
|
||||
#endif /*CONFIG_NETFILTER*/
|
||||
|
||||
#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
|
||||
extern void (*ip_ct_attach)(struct sk_buff *, struct sk_buff *);
|
||||
extern void (*ip_ct_attach)(struct sk_buff *, struct sk_buff *) __rcu;
|
||||
extern void nf_ct_attach(struct sk_buff *, struct sk_buff *);
|
||||
extern void (*nf_ct_destroy)(struct nf_conntrack *);
|
||||
extern void (*nf_ct_destroy)(struct nf_conntrack *) __rcu;
|
||||
#else
|
||||
static inline void nf_ct_attach(struct sk_buff *new, struct sk_buff *skb) {}
|
||||
#endif
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
header-y += ipset/
|
||||
|
||||
header-y += nf_conntrack_common.h
|
||||
header-y += nf_conntrack_ftp.h
|
||||
header-y += nf_conntrack_sctp.h
|
||||
@@ -9,6 +11,7 @@ header-y += nfnetlink_conntrack.h
|
||||
header-y += nfnetlink_log.h
|
||||
header-y += nfnetlink_queue.h
|
||||
header-y += x_tables.h
|
||||
header-y += xt_AUDIT.h
|
||||
header-y += xt_CHECKSUM.h
|
||||
header-y += xt_CLASSIFY.h
|
||||
header-y += xt_CONNMARK.h
|
||||
@@ -26,6 +29,7 @@ header-y += xt_TCPMSS.h
|
||||
header-y += xt_TCPOPTSTRIP.h
|
||||
header-y += xt_TEE.h
|
||||
header-y += xt_TPROXY.h
|
||||
header-y += xt_addrtype.h
|
||||
header-y += xt_cluster.h
|
||||
header-y += xt_comment.h
|
||||
header-y += xt_connbytes.h
|
||||
@@ -34,6 +38,7 @@ header-y += xt_connmark.h
|
||||
header-y += xt_conntrack.h
|
||||
header-y += xt_cpu.h
|
||||
header-y += xt_dccp.h
|
||||
header-y += xt_devgroup.h
|
||||
header-y += xt_dscp.h
|
||||
header-y += xt_esp.h
|
||||
header-y += xt_hashlimit.h
|
||||
@@ -54,7 +59,9 @@ header-y += xt_quota.h
|
||||
header-y += xt_rateest.h
|
||||
header-y += xt_realm.h
|
||||
header-y += xt_recent.h
|
||||
header-y += xt_set.h
|
||||
header-y += xt_sctp.h
|
||||
header-y += xt_socket.h
|
||||
header-y += xt_state.h
|
||||
header-y += xt_statistic.h
|
||||
header-y += xt_string.h
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
header-y += ip_set.h
|
||||
header-y += ip_set_bitmap.h
|
||||
header-y += ip_set_hash.h
|
||||
header-y += ip_set_list.h
|
||||
@@ -0,0 +1,452 @@
|
||||
#ifndef _IP_SET_H
|
||||
#define _IP_SET_H
|
||||
|
||||
/* Copyright (C) 2000-2002 Joakim Axelsson <gozem@linux.nu>
|
||||
* Patrick Schaaf <bof@bof.de>
|
||||
* Martin Josefsson <gandalf@wlug.westbo.se>
|
||||
* Copyright (C) 2003-2011 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
/* The protocol version */
|
||||
#define IPSET_PROTOCOL 6
|
||||
|
||||
/* The max length of strings including NUL: set and type identifiers */
|
||||
#define IPSET_MAXNAMELEN 32
|
||||
|
||||
/* Message types and commands */
|
||||
enum ipset_cmd {
|
||||
IPSET_CMD_NONE,
|
||||
IPSET_CMD_PROTOCOL, /* 1: Return protocol version */
|
||||
IPSET_CMD_CREATE, /* 2: Create a new (empty) set */
|
||||
IPSET_CMD_DESTROY, /* 3: Destroy a (empty) set */
|
||||
IPSET_CMD_FLUSH, /* 4: Remove all elements from a set */
|
||||
IPSET_CMD_RENAME, /* 5: Rename a set */
|
||||
IPSET_CMD_SWAP, /* 6: Swap two sets */
|
||||
IPSET_CMD_LIST, /* 7: List sets */
|
||||
IPSET_CMD_SAVE, /* 8: Save sets */
|
||||
IPSET_CMD_ADD, /* 9: Add an element to a set */
|
||||
IPSET_CMD_DEL, /* 10: Delete an element from a set */
|
||||
IPSET_CMD_TEST, /* 11: Test an element in a set */
|
||||
IPSET_CMD_HEADER, /* 12: Get set header data only */
|
||||
IPSET_CMD_TYPE, /* 13: Get set type */
|
||||
IPSET_MSG_MAX, /* Netlink message commands */
|
||||
|
||||
/* Commands in userspace: */
|
||||
IPSET_CMD_RESTORE = IPSET_MSG_MAX, /* 14: Enter restore mode */
|
||||
IPSET_CMD_HELP, /* 15: Get help */
|
||||
IPSET_CMD_VERSION, /* 16: Get program version */
|
||||
IPSET_CMD_QUIT, /* 17: Quit from interactive mode */
|
||||
|
||||
IPSET_CMD_MAX,
|
||||
|
||||
IPSET_CMD_COMMIT = IPSET_CMD_MAX, /* 18: Commit buffered commands */
|
||||
};
|
||||
|
||||
/* Attributes at command level */
|
||||
enum {
|
||||
IPSET_ATTR_UNSPEC,
|
||||
IPSET_ATTR_PROTOCOL, /* 1: Protocol version */
|
||||
IPSET_ATTR_SETNAME, /* 2: Name of the set */
|
||||
IPSET_ATTR_TYPENAME, /* 3: Typename */
|
||||
IPSET_ATTR_SETNAME2 = IPSET_ATTR_TYPENAME, /* Setname at rename/swap */
|
||||
IPSET_ATTR_REVISION, /* 4: Settype revision */
|
||||
IPSET_ATTR_FAMILY, /* 5: Settype family */
|
||||
IPSET_ATTR_FLAGS, /* 6: Flags at command level */
|
||||
IPSET_ATTR_DATA, /* 7: Nested attributes */
|
||||
IPSET_ATTR_ADT, /* 8: Multiple data containers */
|
||||
IPSET_ATTR_LINENO, /* 9: Restore lineno */
|
||||
IPSET_ATTR_PROTOCOL_MIN, /* 10: Minimal supported version number */
|
||||
IPSET_ATTR_REVISION_MIN = IPSET_ATTR_PROTOCOL_MIN, /* type rev min */
|
||||
__IPSET_ATTR_CMD_MAX,
|
||||
};
|
||||
#define IPSET_ATTR_CMD_MAX (__IPSET_ATTR_CMD_MAX - 1)
|
||||
|
||||
/* CADT specific attributes */
|
||||
enum {
|
||||
IPSET_ATTR_IP = IPSET_ATTR_UNSPEC + 1,
|
||||
IPSET_ATTR_IP_FROM = IPSET_ATTR_IP,
|
||||
IPSET_ATTR_IP_TO, /* 2 */
|
||||
IPSET_ATTR_CIDR, /* 3 */
|
||||
IPSET_ATTR_PORT, /* 4 */
|
||||
IPSET_ATTR_PORT_FROM = IPSET_ATTR_PORT,
|
||||
IPSET_ATTR_PORT_TO, /* 5 */
|
||||
IPSET_ATTR_TIMEOUT, /* 6 */
|
||||
IPSET_ATTR_PROTO, /* 7 */
|
||||
IPSET_ATTR_CADT_FLAGS, /* 8 */
|
||||
IPSET_ATTR_CADT_LINENO = IPSET_ATTR_LINENO, /* 9 */
|
||||
/* Reserve empty slots */
|
||||
IPSET_ATTR_CADT_MAX = 16,
|
||||
/* Create-only specific attributes */
|
||||
IPSET_ATTR_GC,
|
||||
IPSET_ATTR_HASHSIZE,
|
||||
IPSET_ATTR_MAXELEM,
|
||||
IPSET_ATTR_NETMASK,
|
||||
IPSET_ATTR_PROBES,
|
||||
IPSET_ATTR_RESIZE,
|
||||
IPSET_ATTR_SIZE,
|
||||
/* Kernel-only */
|
||||
IPSET_ATTR_ELEMENTS,
|
||||
IPSET_ATTR_REFERENCES,
|
||||
IPSET_ATTR_MEMSIZE,
|
||||
|
||||
__IPSET_ATTR_CREATE_MAX,
|
||||
};
|
||||
#define IPSET_ATTR_CREATE_MAX (__IPSET_ATTR_CREATE_MAX - 1)
|
||||
|
||||
/* ADT specific attributes */
|
||||
enum {
|
||||
IPSET_ATTR_ETHER = IPSET_ATTR_CADT_MAX + 1,
|
||||
IPSET_ATTR_NAME,
|
||||
IPSET_ATTR_NAMEREF,
|
||||
IPSET_ATTR_IP2,
|
||||
IPSET_ATTR_CIDR2,
|
||||
__IPSET_ATTR_ADT_MAX,
|
||||
};
|
||||
#define IPSET_ATTR_ADT_MAX (__IPSET_ATTR_ADT_MAX - 1)
|
||||
|
||||
/* IP specific attributes */
|
||||
enum {
|
||||
IPSET_ATTR_IPADDR_IPV4 = IPSET_ATTR_UNSPEC + 1,
|
||||
IPSET_ATTR_IPADDR_IPV6,
|
||||
__IPSET_ATTR_IPADDR_MAX,
|
||||
};
|
||||
#define IPSET_ATTR_IPADDR_MAX (__IPSET_ATTR_IPADDR_MAX - 1)
|
||||
|
||||
/* Error codes */
|
||||
enum ipset_errno {
|
||||
IPSET_ERR_PRIVATE = 4096,
|
||||
IPSET_ERR_PROTOCOL,
|
||||
IPSET_ERR_FIND_TYPE,
|
||||
IPSET_ERR_MAX_SETS,
|
||||
IPSET_ERR_BUSY,
|
||||
IPSET_ERR_EXIST_SETNAME2,
|
||||
IPSET_ERR_TYPE_MISMATCH,
|
||||
IPSET_ERR_EXIST,
|
||||
IPSET_ERR_INVALID_CIDR,
|
||||
IPSET_ERR_INVALID_NETMASK,
|
||||
IPSET_ERR_INVALID_FAMILY,
|
||||
IPSET_ERR_TIMEOUT,
|
||||
IPSET_ERR_REFERENCED,
|
||||
IPSET_ERR_IPADDR_IPV4,
|
||||
IPSET_ERR_IPADDR_IPV6,
|
||||
|
||||
/* Type specific error codes */
|
||||
IPSET_ERR_TYPE_SPECIFIC = 4352,
|
||||
};
|
||||
|
||||
/* Flags at command level */
|
||||
enum ipset_cmd_flags {
|
||||
IPSET_FLAG_BIT_EXIST = 0,
|
||||
IPSET_FLAG_EXIST = (1 << IPSET_FLAG_BIT_EXIST),
|
||||
};
|
||||
|
||||
/* Flags at CADT attribute level */
|
||||
enum ipset_cadt_flags {
|
||||
IPSET_FLAG_BIT_BEFORE = 0,
|
||||
IPSET_FLAG_BEFORE = (1 << IPSET_FLAG_BIT_BEFORE),
|
||||
};
|
||||
|
||||
/* Commands with settype-specific attributes */
|
||||
enum ipset_adt {
|
||||
IPSET_ADD,
|
||||
IPSET_DEL,
|
||||
IPSET_TEST,
|
||||
IPSET_ADT_MAX,
|
||||
IPSET_CREATE = IPSET_ADT_MAX,
|
||||
IPSET_CADT_MAX,
|
||||
};
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/ip.h>
|
||||
#include <linux/ipv6.h>
|
||||
#include <linux/netlink.h>
|
||||
#include <linux/netfilter.h>
|
||||
#include <linux/vmalloc.h>
|
||||
#include <net/netlink.h>
|
||||
|
||||
/* Sets are identified by an index in kernel space. Tweak with ip_set_id_t
|
||||
* and IPSET_INVALID_ID if you want to increase the max number of sets.
|
||||
*/
|
||||
typedef u16 ip_set_id_t;
|
||||
|
||||
#define IPSET_INVALID_ID 65535
|
||||
|
||||
enum ip_set_dim {
|
||||
IPSET_DIM_ZERO = 0,
|
||||
IPSET_DIM_ONE,
|
||||
IPSET_DIM_TWO,
|
||||
IPSET_DIM_THREE,
|
||||
/* Max dimension in elements.
|
||||
* If changed, new revision of iptables match/target is required.
|
||||
*/
|
||||
IPSET_DIM_MAX = 6,
|
||||
};
|
||||
|
||||
/* Option flags for kernel operations */
|
||||
enum ip_set_kopt {
|
||||
IPSET_INV_MATCH = (1 << IPSET_DIM_ZERO),
|
||||
IPSET_DIM_ONE_SRC = (1 << IPSET_DIM_ONE),
|
||||
IPSET_DIM_TWO_SRC = (1 << IPSET_DIM_TWO),
|
||||
IPSET_DIM_THREE_SRC = (1 << IPSET_DIM_THREE),
|
||||
};
|
||||
|
||||
/* Set features */
|
||||
enum ip_set_feature {
|
||||
IPSET_TYPE_IP_FLAG = 0,
|
||||
IPSET_TYPE_IP = (1 << IPSET_TYPE_IP_FLAG),
|
||||
IPSET_TYPE_PORT_FLAG = 1,
|
||||
IPSET_TYPE_PORT = (1 << IPSET_TYPE_PORT_FLAG),
|
||||
IPSET_TYPE_MAC_FLAG = 2,
|
||||
IPSET_TYPE_MAC = (1 << IPSET_TYPE_MAC_FLAG),
|
||||
IPSET_TYPE_IP2_FLAG = 3,
|
||||
IPSET_TYPE_IP2 = (1 << IPSET_TYPE_IP2_FLAG),
|
||||
IPSET_TYPE_NAME_FLAG = 4,
|
||||
IPSET_TYPE_NAME = (1 << IPSET_TYPE_NAME_FLAG),
|
||||
/* Strictly speaking not a feature, but a flag for dumping:
|
||||
* this settype must be dumped last */
|
||||
IPSET_DUMP_LAST_FLAG = 7,
|
||||
IPSET_DUMP_LAST = (1 << IPSET_DUMP_LAST_FLAG),
|
||||
};
|
||||
|
||||
struct ip_set;
|
||||
|
||||
typedef int (*ipset_adtfn)(struct ip_set *set, void *value, u32 timeout);
|
||||
|
||||
/* Set type, variant-specific part */
|
||||
struct ip_set_type_variant {
|
||||
/* Kernelspace: test/add/del entries
|
||||
* returns negative error code,
|
||||
* zero for no match/success to add/delete
|
||||
* positive for matching element */
|
||||
int (*kadt)(struct ip_set *set, const struct sk_buff * skb,
|
||||
enum ipset_adt adt, u8 pf, u8 dim, u8 flags);
|
||||
|
||||
/* Userspace: test/add/del entries
|
||||
* returns negative error code,
|
||||
* zero for no match/success to add/delete
|
||||
* positive for matching element */
|
||||
int (*uadt)(struct ip_set *set, struct nlattr *tb[],
|
||||
enum ipset_adt adt, u32 *lineno, u32 flags);
|
||||
|
||||
/* Low level add/del/test functions */
|
||||
ipset_adtfn adt[IPSET_ADT_MAX];
|
||||
|
||||
/* When adding entries and set is full, try to resize the set */
|
||||
int (*resize)(struct ip_set *set, bool retried);
|
||||
/* Destroy the set */
|
||||
void (*destroy)(struct ip_set *set);
|
||||
/* Flush the elements */
|
||||
void (*flush)(struct ip_set *set);
|
||||
/* Expire entries before listing */
|
||||
void (*expire)(struct ip_set *set);
|
||||
/* List set header data */
|
||||
int (*head)(struct ip_set *set, struct sk_buff *skb);
|
||||
/* List elements */
|
||||
int (*list)(const struct ip_set *set, struct sk_buff *skb,
|
||||
struct netlink_callback *cb);
|
||||
|
||||
/* Return true if "b" set is the same as "a"
|
||||
* according to the create set parameters */
|
||||
bool (*same_set)(const struct ip_set *a, const struct ip_set *b);
|
||||
};
|
||||
|
||||
/* The core set type structure */
|
||||
struct ip_set_type {
|
||||
struct list_head list;
|
||||
|
||||
/* Typename */
|
||||
char name[IPSET_MAXNAMELEN];
|
||||
/* Protocol version */
|
||||
u8 protocol;
|
||||
/* Set features to control swapping */
|
||||
u8 features;
|
||||
/* Set type dimension */
|
||||
u8 dimension;
|
||||
/* Supported family: may be AF_UNSPEC for both AF_INET/AF_INET6 */
|
||||
u8 family;
|
||||
/* Type revision */
|
||||
u8 revision;
|
||||
|
||||
/* Create set */
|
||||
int (*create)(struct ip_set *set, struct nlattr *tb[], u32 flags);
|
||||
|
||||
/* Attribute policies */
|
||||
const struct nla_policy create_policy[IPSET_ATTR_CREATE_MAX + 1];
|
||||
const struct nla_policy adt_policy[IPSET_ATTR_ADT_MAX + 1];
|
||||
|
||||
/* Set this to THIS_MODULE if you are a module, otherwise NULL */
|
||||
struct module *me;
|
||||
};
|
||||
|
||||
/* register and unregister set type */
|
||||
extern int ip_set_type_register(struct ip_set_type *set_type);
|
||||
extern void ip_set_type_unregister(struct ip_set_type *set_type);
|
||||
|
||||
/* A generic IP set */
|
||||
struct ip_set {
|
||||
/* The name of the set */
|
||||
char name[IPSET_MAXNAMELEN];
|
||||
/* Lock protecting the set data */
|
||||
rwlock_t lock;
|
||||
/* References to the set */
|
||||
atomic_t ref;
|
||||
/* The core set type */
|
||||
struct ip_set_type *type;
|
||||
/* The type variant doing the real job */
|
||||
const struct ip_set_type_variant *variant;
|
||||
/* The actual INET family of the set */
|
||||
u8 family;
|
||||
/* The type specific data */
|
||||
void *data;
|
||||
};
|
||||
|
||||
/* register and unregister set references */
|
||||
extern ip_set_id_t ip_set_get_byname(const char *name, struct ip_set **set);
|
||||
extern void ip_set_put_byindex(ip_set_id_t index);
|
||||
extern const char * ip_set_name_byindex(ip_set_id_t index);
|
||||
extern ip_set_id_t ip_set_nfnl_get(const char *name);
|
||||
extern ip_set_id_t ip_set_nfnl_get_byindex(ip_set_id_t index);
|
||||
extern void ip_set_nfnl_put(ip_set_id_t index);
|
||||
|
||||
/* API for iptables set match, and SET target */
|
||||
extern int ip_set_add(ip_set_id_t id, const struct sk_buff *skb,
|
||||
u8 family, u8 dim, u8 flags);
|
||||
extern int ip_set_del(ip_set_id_t id, const struct sk_buff *skb,
|
||||
u8 family, u8 dim, u8 flags);
|
||||
extern int ip_set_test(ip_set_id_t id, const struct sk_buff *skb,
|
||||
u8 family, u8 dim, u8 flags);
|
||||
|
||||
/* Utility functions */
|
||||
extern void * ip_set_alloc(size_t size);
|
||||
extern void ip_set_free(void *members);
|
||||
extern int ip_set_get_ipaddr4(struct nlattr *nla, __be32 *ipaddr);
|
||||
extern int ip_set_get_ipaddr6(struct nlattr *nla, union nf_inet_addr *ipaddr);
|
||||
|
||||
static inline int
|
||||
ip_set_get_hostipaddr4(struct nlattr *nla, u32 *ipaddr)
|
||||
{
|
||||
__be32 ip;
|
||||
int ret = ip_set_get_ipaddr4(nla, &ip);
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
*ipaddr = ntohl(ip);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Ignore IPSET_ERR_EXIST errors if asked to do so? */
|
||||
static inline bool
|
||||
ip_set_eexist(int ret, u32 flags)
|
||||
{
|
||||
return ret == -IPSET_ERR_EXIST && (flags & IPSET_FLAG_EXIST);
|
||||
}
|
||||
|
||||
/* Check the NLA_F_NET_BYTEORDER flag */
|
||||
static inline bool
|
||||
ip_set_attr_netorder(struct nlattr *tb[], int type)
|
||||
{
|
||||
return tb[type] && (tb[type]->nla_type & NLA_F_NET_BYTEORDER);
|
||||
}
|
||||
|
||||
static inline bool
|
||||
ip_set_optattr_netorder(struct nlattr *tb[], int type)
|
||||
{
|
||||
return !tb[type] || (tb[type]->nla_type & NLA_F_NET_BYTEORDER);
|
||||
}
|
||||
|
||||
/* Useful converters */
|
||||
static inline u32
|
||||
ip_set_get_h32(const struct nlattr *attr)
|
||||
{
|
||||
return ntohl(nla_get_be32(attr));
|
||||
}
|
||||
|
||||
static inline u16
|
||||
ip_set_get_h16(const struct nlattr *attr)
|
||||
{
|
||||
return ntohs(nla_get_be16(attr));
|
||||
}
|
||||
|
||||
#define ipset_nest_start(skb, attr) nla_nest_start(skb, attr | NLA_F_NESTED)
|
||||
#define ipset_nest_end(skb, start) nla_nest_end(skb, start)
|
||||
|
||||
#define NLA_PUT_IPADDR4(skb, type, ipaddr) \
|
||||
do { \
|
||||
struct nlattr *__nested = ipset_nest_start(skb, type); \
|
||||
\
|
||||
if (!__nested) \
|
||||
goto nla_put_failure; \
|
||||
NLA_PUT_NET32(skb, IPSET_ATTR_IPADDR_IPV4, ipaddr); \
|
||||
ipset_nest_end(skb, __nested); \
|
||||
} while (0)
|
||||
|
||||
#define NLA_PUT_IPADDR6(skb, type, ipaddrptr) \
|
||||
do { \
|
||||
struct nlattr *__nested = ipset_nest_start(skb, type); \
|
||||
\
|
||||
if (!__nested) \
|
||||
goto nla_put_failure; \
|
||||
NLA_PUT(skb, IPSET_ATTR_IPADDR_IPV6, \
|
||||
sizeof(struct in6_addr), ipaddrptr); \
|
||||
ipset_nest_end(skb, __nested); \
|
||||
} while (0)
|
||||
|
||||
/* Get address from skbuff */
|
||||
static inline __be32
|
||||
ip4addr(const struct sk_buff *skb, bool src)
|
||||
{
|
||||
return src ? ip_hdr(skb)->saddr : ip_hdr(skb)->daddr;
|
||||
}
|
||||
|
||||
static inline void
|
||||
ip4addrptr(const struct sk_buff *skb, bool src, __be32 *addr)
|
||||
{
|
||||
*addr = src ? ip_hdr(skb)->saddr : ip_hdr(skb)->daddr;
|
||||
}
|
||||
|
||||
static inline void
|
||||
ip6addrptr(const struct sk_buff *skb, bool src, struct in6_addr *addr)
|
||||
{
|
||||
memcpy(addr, src ? &ipv6_hdr(skb)->saddr : &ipv6_hdr(skb)->daddr,
|
||||
sizeof(*addr));
|
||||
}
|
||||
|
||||
/* Calculate the bytes required to store the inclusive range of a-b */
|
||||
static inline int
|
||||
bitmap_bytes(u32 a, u32 b)
|
||||
{
|
||||
return 4 * ((((b - a + 8) / 8) + 3) / 4);
|
||||
}
|
||||
|
||||
/* Interface to iptables/ip6tables */
|
||||
|
||||
#define SO_IP_SET 83
|
||||
|
||||
union ip_set_name_index {
|
||||
char name[IPSET_MAXNAMELEN];
|
||||
ip_set_id_t index;
|
||||
};
|
||||
|
||||
#define IP_SET_OP_GET_BYNAME 0x00000006 /* Get set index by name */
|
||||
struct ip_set_req_get_set {
|
||||
unsigned op;
|
||||
unsigned version;
|
||||
union ip_set_name_index set;
|
||||
};
|
||||
|
||||
#define IP_SET_OP_GET_BYINDEX 0x00000007 /* Get set name by index */
|
||||
/* Uses ip_set_req_get_set */
|
||||
|
||||
#define IP_SET_OP_VERSION 0x00000100 /* Ask kernel version */
|
||||
struct ip_set_req_version {
|
||||
unsigned op;
|
||||
unsigned version;
|
||||
};
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /*_IP_SET_H */
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,31 @@
|
||||
#ifndef __IP_SET_BITMAP_H
|
||||
#define __IP_SET_BITMAP_H
|
||||
|
||||
/* Bitmap type specific error codes */
|
||||
enum {
|
||||
/* The element is out of the range of the set */
|
||||
IPSET_ERR_BITMAP_RANGE = IPSET_ERR_TYPE_SPECIFIC,
|
||||
/* The range exceeds the size limit of the set type */
|
||||
IPSET_ERR_BITMAP_RANGE_SIZE,
|
||||
};
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#define IPSET_BITMAP_MAX_RANGE 0x0000FFFF
|
||||
|
||||
/* Common functions */
|
||||
|
||||
static inline u32
|
||||
range_to_mask(u32 from, u32 to, u8 *bits)
|
||||
{
|
||||
u32 mask = 0xFFFFFFFE;
|
||||
|
||||
*bits = 32;
|
||||
while (--(*bits) > 0 && mask && (to & mask) != from)
|
||||
mask <<= 1;
|
||||
|
||||
return mask;
|
||||
}
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* __IP_SET_BITMAP_H */
|
||||
@@ -0,0 +1,21 @@
|
||||
#ifndef _IP_SET_GETPORT_H
|
||||
#define _IP_SET_GETPORT_H
|
||||
|
||||
extern bool ip_set_get_ip4_port(const struct sk_buff *skb, bool src,
|
||||
__be16 *port, u8 *proto);
|
||||
|
||||
#if defined(CONFIG_IP6_NF_IPTABLES) || defined(CONFIG_IP6_NF_IPTABLES_MODULE)
|
||||
extern bool ip_set_get_ip6_port(const struct sk_buff *skb, bool src,
|
||||
__be16 *port, u8 *proto);
|
||||
#else
|
||||
static inline bool ip_set_get_ip6_port(const struct sk_buff *skb, bool src,
|
||||
__be16 *port, u8 *proto)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
extern bool ip_set_get_ip_port(const struct sk_buff *skb, u8 pf, bool src,
|
||||
__be16 *port);
|
||||
|
||||
#endif /*_IP_SET_GETPORT_H*/
|
||||
@@ -0,0 +1,26 @@
|
||||
#ifndef __IP_SET_HASH_H
|
||||
#define __IP_SET_HASH_H
|
||||
|
||||
/* Hash type specific error codes */
|
||||
enum {
|
||||
/* Hash is full */
|
||||
IPSET_ERR_HASH_FULL = IPSET_ERR_TYPE_SPECIFIC,
|
||||
/* Null-valued element */
|
||||
IPSET_ERR_HASH_ELEM,
|
||||
/* Invalid protocol */
|
||||
IPSET_ERR_INVALID_PROTO,
|
||||
/* Protocol missing but must be specified */
|
||||
IPSET_ERR_MISSING_PROTO,
|
||||
};
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#define IPSET_DEFAULT_HASHSIZE 1024
|
||||
#define IPSET_MIMINAL_HASHSIZE 64
|
||||
#define IPSET_DEFAULT_MAXELEM 65536
|
||||
#define IPSET_DEFAULT_PROBES 4
|
||||
#define IPSET_DEFAULT_RESIZE 100
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* __IP_SET_HASH_H */
|
||||
@@ -0,0 +1,27 @@
|
||||
#ifndef __IP_SET_LIST_H
|
||||
#define __IP_SET_LIST_H
|
||||
|
||||
/* List type specific error codes */
|
||||
enum {
|
||||
/* Set name to be added/deleted/tested does not exist. */
|
||||
IPSET_ERR_NAME = IPSET_ERR_TYPE_SPECIFIC,
|
||||
/* list:set type is not permitted to add */
|
||||
IPSET_ERR_LOOP,
|
||||
/* Missing reference set */
|
||||
IPSET_ERR_BEFORE,
|
||||
/* Reference set does not exist */
|
||||
IPSET_ERR_NAMEREF,
|
||||
/* Set is full */
|
||||
IPSET_ERR_LIST_FULL,
|
||||
/* Reference set is not added to the set */
|
||||
IPSET_ERR_REF_EXIST,
|
||||
};
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#define IP_SET_LIST_DEFAULT_SIZE 8
|
||||
#define IP_SET_LIST_MIN_SIZE 4
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* __IP_SET_LIST_H */
|
||||
@@ -0,0 +1,127 @@
|
||||
#ifndef _IP_SET_TIMEOUT_H
|
||||
#define _IP_SET_TIMEOUT_H
|
||||
|
||||
/* Copyright (C) 2003-2011 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
/* How often should the gc be run by default */
|
||||
#define IPSET_GC_TIME (3 * 60)
|
||||
|
||||
/* Timeout period depending on the timeout value of the given set */
|
||||
#define IPSET_GC_PERIOD(timeout) \
|
||||
((timeout/3) ? min_t(u32, (timeout)/3, IPSET_GC_TIME) : 1)
|
||||
|
||||
/* Set is defined without timeout support: timeout value may be 0 */
|
||||
#define IPSET_NO_TIMEOUT UINT_MAX
|
||||
|
||||
#define with_timeout(timeout) ((timeout) != IPSET_NO_TIMEOUT)
|
||||
|
||||
static inline unsigned int
|
||||
ip_set_timeout_uget(struct nlattr *tb)
|
||||
{
|
||||
unsigned int timeout = ip_set_get_h32(tb);
|
||||
|
||||
/* Userspace supplied TIMEOUT parameter: adjust crazy size */
|
||||
return timeout == IPSET_NO_TIMEOUT ? IPSET_NO_TIMEOUT - 1 : timeout;
|
||||
}
|
||||
|
||||
#ifdef IP_SET_BITMAP_TIMEOUT
|
||||
|
||||
/* Bitmap specific timeout constants and macros for the entries */
|
||||
|
||||
/* Bitmap entry is unset */
|
||||
#define IPSET_ELEM_UNSET 0
|
||||
/* Bitmap entry is set with no timeout value */
|
||||
#define IPSET_ELEM_PERMANENT (UINT_MAX/2)
|
||||
|
||||
static inline bool
|
||||
ip_set_timeout_test(unsigned long timeout)
|
||||
{
|
||||
return timeout != IPSET_ELEM_UNSET &&
|
||||
(timeout == IPSET_ELEM_PERMANENT ||
|
||||
time_after(timeout, jiffies));
|
||||
}
|
||||
|
||||
static inline bool
|
||||
ip_set_timeout_expired(unsigned long timeout)
|
||||
{
|
||||
return timeout != IPSET_ELEM_UNSET &&
|
||||
timeout != IPSET_ELEM_PERMANENT &&
|
||||
time_before(timeout, jiffies);
|
||||
}
|
||||
|
||||
static inline unsigned long
|
||||
ip_set_timeout_set(u32 timeout)
|
||||
{
|
||||
unsigned long t;
|
||||
|
||||
if (!timeout)
|
||||
return IPSET_ELEM_PERMANENT;
|
||||
|
||||
t = timeout * HZ + jiffies;
|
||||
if (t == IPSET_ELEM_UNSET || t == IPSET_ELEM_PERMANENT)
|
||||
/* Bingo! */
|
||||
t++;
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
static inline u32
|
||||
ip_set_timeout_get(unsigned long timeout)
|
||||
{
|
||||
return timeout == IPSET_ELEM_PERMANENT ? 0 : (timeout - jiffies)/HZ;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
/* Hash specific timeout constants and macros for the entries */
|
||||
|
||||
/* Hash entry is set with no timeout value */
|
||||
#define IPSET_ELEM_PERMANENT 0
|
||||
|
||||
static inline bool
|
||||
ip_set_timeout_test(unsigned long timeout)
|
||||
{
|
||||
return timeout == IPSET_ELEM_PERMANENT ||
|
||||
time_after(timeout, jiffies);
|
||||
}
|
||||
|
||||
static inline bool
|
||||
ip_set_timeout_expired(unsigned long timeout)
|
||||
{
|
||||
return timeout != IPSET_ELEM_PERMANENT &&
|
||||
time_before(timeout, jiffies);
|
||||
}
|
||||
|
||||
static inline unsigned long
|
||||
ip_set_timeout_set(u32 timeout)
|
||||
{
|
||||
unsigned long t;
|
||||
|
||||
if (!timeout)
|
||||
return IPSET_ELEM_PERMANENT;
|
||||
|
||||
t = timeout * HZ + jiffies;
|
||||
if (t == IPSET_ELEM_PERMANENT)
|
||||
/* Bingo! :-) */
|
||||
t++;
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
static inline u32
|
||||
ip_set_timeout_get(unsigned long timeout)
|
||||
{
|
||||
return timeout == IPSET_ELEM_PERMANENT ? 0 : (timeout - jiffies)/HZ;
|
||||
}
|
||||
#endif /* ! IP_SET_BITMAP_TIMEOUT */
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _IP_SET_TIMEOUT_H */
|
||||
@@ -0,0 +1,35 @@
|
||||
#ifndef _PFXLEN_H
|
||||
#define _PFXLEN_H
|
||||
|
||||
#include <asm/byteorder.h>
|
||||
#include <linux/netfilter.h>
|
||||
|
||||
/* Prefixlen maps, by Jan Engelhardt */
|
||||
extern const union nf_inet_addr ip_set_netmask_map[];
|
||||
extern const union nf_inet_addr ip_set_hostmask_map[];
|
||||
|
||||
static inline __be32
|
||||
ip_set_netmask(u8 pfxlen)
|
||||
{
|
||||
return ip_set_netmask_map[pfxlen].ip;
|
||||
}
|
||||
|
||||
static inline const __be32 *
|
||||
ip_set_netmask6(u8 pfxlen)
|
||||
{
|
||||
return &ip_set_netmask_map[pfxlen].ip6[0];
|
||||
}
|
||||
|
||||
static inline u32
|
||||
ip_set_hostmask(u8 pfxlen)
|
||||
{
|
||||
return (__force u32) ip_set_hostmask_map[pfxlen].ip;
|
||||
}
|
||||
|
||||
static inline const __be32 *
|
||||
ip_set_hostmask6(u8 pfxlen)
|
||||
{
|
||||
return &ip_set_hostmask_map[pfxlen].ip6[0];
|
||||
}
|
||||
|
||||
#endif /*_PFXLEN_H */
|
||||
@@ -0,0 +1,9 @@
|
||||
#ifndef _NF_CONNTRACK_SNMP_H
|
||||
#define _NF_CONNTRACK_SNMP_H
|
||||
|
||||
extern int (*nf_nat_snmp_hook)(struct sk_buff *skb,
|
||||
unsigned int protoff,
|
||||
struct nf_conn *ct,
|
||||
enum ip_conntrack_info ctinfo);
|
||||
|
||||
#endif /* _NF_CONNTRACK_SNMP_H */
|
||||
@@ -47,7 +47,8 @@ struct nfgenmsg {
|
||||
#define NFNL_SUBSYS_QUEUE 3
|
||||
#define NFNL_SUBSYS_ULOG 4
|
||||
#define NFNL_SUBSYS_OSF 5
|
||||
#define NFNL_SUBSYS_COUNT 6
|
||||
#define NFNL_SUBSYS_IPSET 6
|
||||
#define NFNL_SUBSYS_COUNT 7
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
|
||||
@@ -42,6 +42,7 @@ enum ctattr_type {
|
||||
CTA_SECMARK, /* obsolete */
|
||||
CTA_ZONE,
|
||||
CTA_SECCTX,
|
||||
CTA_TIMESTAMP,
|
||||
__CTA_MAX
|
||||
};
|
||||
#define CTA_MAX (__CTA_MAX - 1)
|
||||
@@ -127,6 +128,14 @@ enum ctattr_counters {
|
||||
};
|
||||
#define CTA_COUNTERS_MAX (__CTA_COUNTERS_MAX - 1)
|
||||
|
||||
enum ctattr_tstamp {
|
||||
CTA_TIMESTAMP_UNSPEC,
|
||||
CTA_TIMESTAMP_START,
|
||||
CTA_TIMESTAMP_STOP,
|
||||
__CTA_TIMESTAMP_MAX
|
||||
};
|
||||
#define CTA_TIMESTAMP_MAX (__CTA_TIMESTAMP_MAX - 1)
|
||||
|
||||
enum ctattr_nat {
|
||||
CTA_NAT_UNSPEC,
|
||||
CTA_NAT_MINIP,
|
||||
|
||||
@@ -611,8 +611,9 @@ struct _compat_xt_align {
|
||||
extern void xt_compat_lock(u_int8_t af);
|
||||
extern void xt_compat_unlock(u_int8_t af);
|
||||
|
||||
extern int xt_compat_add_offset(u_int8_t af, unsigned int offset, short delta);
|
||||
extern int xt_compat_add_offset(u_int8_t af, unsigned int offset, int delta);
|
||||
extern void xt_compat_flush_offsets(u_int8_t af);
|
||||
extern void xt_compat_init_offsets(u_int8_t af, unsigned int number);
|
||||
extern int xt_compat_calc_jump(u_int8_t af, unsigned int offset);
|
||||
|
||||
extern int xt_compat_match_offset(const struct xt_match *match);
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Header file for iptables xt_AUDIT target
|
||||
*
|
||||
* (C) 2010-2011 Thomas Graf <tgraf@redhat.com>
|
||||
* (C) 2010-2011 Red Hat, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef _XT_AUDIT_TARGET_H
|
||||
#define _XT_AUDIT_TARGET_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
enum {
|
||||
XT_AUDIT_TYPE_ACCEPT = 0,
|
||||
XT_AUDIT_TYPE_DROP,
|
||||
XT_AUDIT_TYPE_REJECT,
|
||||
__XT_AUDIT_TYPE_MAX,
|
||||
};
|
||||
|
||||
#define XT_AUDIT_TYPE_MAX (__XT_AUDIT_TYPE_MAX - 1)
|
||||
|
||||
struct xt_audit_info {
|
||||
__u8 type; /* XT_AUDIT_TYPE_* */
|
||||
};
|
||||
|
||||
#endif /* _XT_AUDIT_TARGET_H */
|
||||
@@ -1,14 +1,16 @@
|
||||
#ifndef _XT_CT_H
|
||||
#define _XT_CT_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define XT_CT_NOTRACK 0x1
|
||||
|
||||
struct xt_ct_target_info {
|
||||
u_int16_t flags;
|
||||
u_int16_t zone;
|
||||
u_int32_t ct_events;
|
||||
u_int32_t exp_events;
|
||||
char helper[16];
|
||||
__u16 flags;
|
||||
__u16 zone;
|
||||
__u32 ct_events;
|
||||
__u32 exp_events;
|
||||
char helper[16];
|
||||
|
||||
/* Used internally by the kernel */
|
||||
struct nf_conn *ct __attribute__((aligned(8)));
|
||||
|
||||
@@ -20,4 +20,10 @@ struct xt_NFQ_info_v1 {
|
||||
__u16 queues_total;
|
||||
};
|
||||
|
||||
struct xt_NFQ_info_v2 {
|
||||
__u16 queuenum;
|
||||
__u16 queues_total;
|
||||
__u16 bypass;
|
||||
};
|
||||
|
||||
#endif /* _XT_NFQ_TARGET_H */
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
#ifndef _XT_TCPOPTSTRIP_H
|
||||
#define _XT_TCPOPTSTRIP_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define tcpoptstrip_set_bit(bmap, idx) \
|
||||
(bmap[(idx) >> 5] |= 1U << (idx & 31))
|
||||
#define tcpoptstrip_test_bit(bmap, idx) \
|
||||
(((1U << (idx & 31)) & bmap[(idx) >> 5]) != 0)
|
||||
|
||||
struct xt_tcpoptstrip_target_info {
|
||||
u_int32_t strip_bmap[8];
|
||||
__u32 strip_bmap[8];
|
||||
};
|
||||
|
||||
#endif /* _XT_TCPOPTSTRIP_H */
|
||||
|
||||
@@ -1,19 +1,21 @@
|
||||
#ifndef _XT_TPROXY_H
|
||||
#define _XT_TPROXY_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/* TPROXY target is capable of marking the packet to perform
|
||||
* redirection. We can get rid of that whenever we get support for
|
||||
* mutliple targets in the same rule. */
|
||||
struct xt_tproxy_target_info {
|
||||
u_int32_t mark_mask;
|
||||
u_int32_t mark_value;
|
||||
__u32 mark_mask;
|
||||
__u32 mark_value;
|
||||
__be32 laddr;
|
||||
__be16 lport;
|
||||
};
|
||||
|
||||
struct xt_tproxy_target_info_v1 {
|
||||
u_int32_t mark_mask;
|
||||
u_int32_t mark_value;
|
||||
__u32 mark_mask;
|
||||
__u32 mark_value;
|
||||
union nf_inet_addr laddr;
|
||||
__be16 lport;
|
||||
};
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
#ifndef _XT_ADDRTYPE_H
|
||||
#define _XT_ADDRTYPE_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
enum {
|
||||
XT_ADDRTYPE_INVERT_SOURCE = 0x0001,
|
||||
XT_ADDRTYPE_INVERT_DEST = 0x0002,
|
||||
XT_ADDRTYPE_LIMIT_IFACE_IN = 0x0004,
|
||||
XT_ADDRTYPE_LIMIT_IFACE_OUT = 0x0008,
|
||||
};
|
||||
|
||||
|
||||
/* rtn_type enum values from rtnetlink.h, but shifted */
|
||||
enum {
|
||||
XT_ADDRTYPE_UNSPEC = 1 << 0,
|
||||
XT_ADDRTYPE_UNICAST = 1 << 1, /* 1 << RTN_UNICAST */
|
||||
XT_ADDRTYPE_LOCAL = 1 << 2, /* 1 << RTN_LOCAL, etc */
|
||||
XT_ADDRTYPE_BROADCAST = 1 << 3,
|
||||
XT_ADDRTYPE_ANYCAST = 1 << 4,
|
||||
XT_ADDRTYPE_MULTICAST = 1 << 5,
|
||||
XT_ADDRTYPE_BLACKHOLE = 1 << 6,
|
||||
XT_ADDRTYPE_UNREACHABLE = 1 << 7,
|
||||
XT_ADDRTYPE_PROHIBIT = 1 << 8,
|
||||
XT_ADDRTYPE_THROW = 1 << 9,
|
||||
XT_ADDRTYPE_NAT = 1 << 10,
|
||||
XT_ADDRTYPE_XRESOLVE = 1 << 11,
|
||||
};
|
||||
|
||||
struct xt_addrtype_info_v1 {
|
||||
__u16 source; /* source-type mask */
|
||||
__u16 dest; /* dest-type mask */
|
||||
__u32 flags;
|
||||
};
|
||||
|
||||
/* revision 0 */
|
||||
struct xt_addrtype_info {
|
||||
__u16 source; /* source-type mask */
|
||||
__u16 dest; /* dest-type mask */
|
||||
__u32 invert_source;
|
||||
__u32 invert_dest;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,15 +1,17 @@
|
||||
#ifndef _XT_CLUSTER_MATCH_H
|
||||
#define _XT_CLUSTER_MATCH_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
enum xt_cluster_flags {
|
||||
XT_CLUSTER_F_INV = (1 << 0)
|
||||
};
|
||||
|
||||
struct xt_cluster_match_info {
|
||||
u_int32_t total_nodes;
|
||||
u_int32_t node_mask;
|
||||
u_int32_t hash_seed;
|
||||
u_int32_t flags;
|
||||
__u32 total_nodes;
|
||||
__u32 node_mask;
|
||||
__u32 hash_seed;
|
||||
__u32 flags;
|
||||
};
|
||||
|
||||
#define XT_CLUSTER_NODES_MAX 32
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#define XT_MAX_COMMENT_LEN 256
|
||||
|
||||
struct xt_comment_info {
|
||||
unsigned char comment[XT_MAX_COMMENT_LEN];
|
||||
char comment[XT_MAX_COMMENT_LEN];
|
||||
};
|
||||
|
||||
#endif /* XT_COMMENT_H */
|
||||
|
||||
@@ -1,8 +1,15 @@
|
||||
#ifndef _XT_CONNLIMIT_H
|
||||
#define _XT_CONNLIMIT_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
struct xt_connlimit_data;
|
||||
|
||||
enum {
|
||||
XT_CONNLIMIT_INVERT = 1 << 0,
|
||||
XT_CONNLIMIT_DADDR = 1 << 1,
|
||||
};
|
||||
|
||||
struct xt_connlimit_info {
|
||||
union {
|
||||
union nf_inet_addr mask;
|
||||
@@ -13,7 +20,14 @@ struct xt_connlimit_info {
|
||||
};
|
||||
#endif
|
||||
};
|
||||
unsigned int limit, inverse;
|
||||
unsigned int limit;
|
||||
union {
|
||||
/* revision 0 */
|
||||
unsigned int inverse;
|
||||
|
||||
/* revision 1 */
|
||||
__u32 flags;
|
||||
};
|
||||
|
||||
/* Used internally by the kernel */
|
||||
struct xt_connlimit_data *data __attribute__((aligned(8)));
|
||||
|
||||
@@ -58,4 +58,19 @@ struct xt_conntrack_mtinfo2 {
|
||||
__u16 state_mask, status_mask;
|
||||
};
|
||||
|
||||
struct xt_conntrack_mtinfo3 {
|
||||
union nf_inet_addr origsrc_addr, origsrc_mask;
|
||||
union nf_inet_addr origdst_addr, origdst_mask;
|
||||
union nf_inet_addr replsrc_addr, replsrc_mask;
|
||||
union nf_inet_addr repldst_addr, repldst_mask;
|
||||
__u32 expires_min, expires_max;
|
||||
__u16 l4proto;
|
||||
__u16 origsrc_port, origdst_port;
|
||||
__u16 replsrc_port, repldst_port;
|
||||
__u16 match_flags, invert_flags;
|
||||
__u16 state_mask, status_mask;
|
||||
__u16 origsrc_port_high, origdst_port_high;
|
||||
__u16 replsrc_port_high, repldst_port_high;
|
||||
};
|
||||
|
||||
#endif /*_XT_CONNTRACK_H*/
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
#ifndef _XT_DEVGROUP_H
|
||||
#define _XT_DEVGROUP_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
enum xt_devgroup_flags {
|
||||
XT_DEVGROUP_MATCH_SRC = 0x1,
|
||||
XT_DEVGROUP_INVERT_SRC = 0x2,
|
||||
XT_DEVGROUP_MATCH_DST = 0x4,
|
||||
XT_DEVGROUP_INVERT_DST = 0x8,
|
||||
};
|
||||
|
||||
struct xt_devgroup_info {
|
||||
__u32 flags;
|
||||
__u32 src_group;
|
||||
__u32 src_mask;
|
||||
__u32 dst_group;
|
||||
__u32 dst_mask;
|
||||
};
|
||||
|
||||
#endif /* _XT_DEVGROUP_H */
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef _XT_QUOTA_H
|
||||
#define _XT_QUOTA_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
enum xt_quota_flags {
|
||||
XT_QUOTA_INVERT = 0x1,
|
||||
};
|
||||
@@ -9,9 +11,9 @@ enum xt_quota_flags {
|
||||
struct xt_quota_priv;
|
||||
|
||||
struct xt_quota_info {
|
||||
u_int32_t flags;
|
||||
u_int32_t pad;
|
||||
aligned_u64 quota;
|
||||
__u32 flags;
|
||||
__u32 pad;
|
||||
aligned_u64 quota;
|
||||
|
||||
/* Used internally by the kernel */
|
||||
struct xt_quota_priv *master;
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
#ifndef _XT_SET_H
|
||||
#define _XT_SET_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/netfilter/ipset/ip_set.h>
|
||||
|
||||
/* Revision 0 interface: backward compatible with netfilter/iptables */
|
||||
|
||||
/*
|
||||
* Option flags for kernel operations (xt_set_info_v0)
|
||||
*/
|
||||
#define IPSET_SRC 0x01 /* Source match/add */
|
||||
#define IPSET_DST 0x02 /* Destination match/add */
|
||||
#define IPSET_MATCH_INV 0x04 /* Inverse matching */
|
||||
|
||||
struct xt_set_info_v0 {
|
||||
ip_set_id_t index;
|
||||
union {
|
||||
__u32 flags[IPSET_DIM_MAX + 1];
|
||||
struct {
|
||||
__u32 __flags[IPSET_DIM_MAX];
|
||||
__u8 dim;
|
||||
__u8 flags;
|
||||
} compat;
|
||||
} u;
|
||||
};
|
||||
|
||||
/* match and target infos */
|
||||
struct xt_set_info_match_v0 {
|
||||
struct xt_set_info_v0 match_set;
|
||||
};
|
||||
|
||||
struct xt_set_info_target_v0 {
|
||||
struct xt_set_info_v0 add_set;
|
||||
struct xt_set_info_v0 del_set;
|
||||
};
|
||||
|
||||
/* Revision 1: current interface to netfilter/iptables */
|
||||
|
||||
struct xt_set_info {
|
||||
ip_set_id_t index;
|
||||
__u8 dim;
|
||||
__u8 flags;
|
||||
};
|
||||
|
||||
/* match and target infos */
|
||||
struct xt_set_info_match {
|
||||
struct xt_set_info match_set;
|
||||
};
|
||||
|
||||
struct xt_set_info_target {
|
||||
struct xt_set_info add_set;
|
||||
struct xt_set_info del_set;
|
||||
};
|
||||
|
||||
#endif /*_XT_SET_H*/
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef _XT_SOCKET_H
|
||||
#define _XT_SOCKET_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
enum {
|
||||
XT_SOCKET_TRANSPARENT = 1 << 0,
|
||||
};
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
#ifndef _XT_TIME_H
|
||||
#define _XT_TIME_H 1
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
struct xt_time_info {
|
||||
u_int32_t date_start;
|
||||
u_int32_t date_stop;
|
||||
u_int32_t daytime_start;
|
||||
u_int32_t daytime_stop;
|
||||
u_int32_t monthdays_match;
|
||||
u_int8_t weekdays_match;
|
||||
u_int8_t flags;
|
||||
__u32 date_start;
|
||||
__u32 date_stop;
|
||||
__u32 daytime_start;
|
||||
__u32 daytime_stop;
|
||||
__u32 monthdays_match;
|
||||
__u8 weekdays_match;
|
||||
__u8 flags;
|
||||
};
|
||||
|
||||
enum {
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef _XT_U32_H
|
||||
#define _XT_U32_H 1
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
enum xt_u32_ops {
|
||||
XT_U32_AND,
|
||||
XT_U32_LEFTSH,
|
||||
@@ -9,13 +11,13 @@ enum xt_u32_ops {
|
||||
};
|
||||
|
||||
struct xt_u32_location_element {
|
||||
u_int32_t number;
|
||||
u_int8_t nextop;
|
||||
__u32 number;
|
||||
__u8 nextop;
|
||||
};
|
||||
|
||||
struct xt_u32_value_element {
|
||||
u_int32_t min;
|
||||
u_int32_t max;
|
||||
__u32 min;
|
||||
__u32 max;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -27,14 +29,14 @@ struct xt_u32_value_element {
|
||||
struct xt_u32_test {
|
||||
struct xt_u32_location_element location[XT_U32_MAXSIZE+1];
|
||||
struct xt_u32_value_element value[XT_U32_MAXSIZE+1];
|
||||
u_int8_t nnums;
|
||||
u_int8_t nvalues;
|
||||
__u8 nnums;
|
||||
__u8 nvalues;
|
||||
};
|
||||
|
||||
struct xt_u32 {
|
||||
struct xt_u32_test tests[XT_U32_MAXSIZE+1];
|
||||
u_int8_t ntests;
|
||||
u_int8_t invert;
|
||||
__u8 ntests;
|
||||
__u8 invert;
|
||||
};
|
||||
|
||||
#endif /* _XT_U32_H */
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef __LINUX_BRIDGE_EBT_802_3_H
|
||||
#define __LINUX_BRIDGE_EBT_802_3_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define EBT_802_3_SAP 0x01
|
||||
#define EBT_802_3_TYPE 0x02
|
||||
|
||||
@@ -24,24 +26,24 @@
|
||||
|
||||
/* ui has one byte ctrl, ni has two */
|
||||
struct hdr_ui {
|
||||
uint8_t dsap;
|
||||
uint8_t ssap;
|
||||
uint8_t ctrl;
|
||||
uint8_t orig[3];
|
||||
__u8 dsap;
|
||||
__u8 ssap;
|
||||
__u8 ctrl;
|
||||
__u8 orig[3];
|
||||
__be16 type;
|
||||
};
|
||||
|
||||
struct hdr_ni {
|
||||
uint8_t dsap;
|
||||
uint8_t ssap;
|
||||
__u8 dsap;
|
||||
__u8 ssap;
|
||||
__be16 ctrl;
|
||||
uint8_t orig[3];
|
||||
__u8 orig[3];
|
||||
__be16 type;
|
||||
};
|
||||
|
||||
struct ebt_802_3_hdr {
|
||||
uint8_t daddr[6];
|
||||
uint8_t saddr[6];
|
||||
__u8 daddr[6];
|
||||
__u8 saddr[6];
|
||||
__be16 len;
|
||||
union {
|
||||
struct hdr_ui ui;
|
||||
@@ -59,10 +61,10 @@ static inline struct ebt_802_3_hdr *ebt_802_3_hdr(const struct sk_buff *skb)
|
||||
#endif
|
||||
|
||||
struct ebt_802_3_info {
|
||||
uint8_t sap;
|
||||
__u8 sap;
|
||||
__be16 type;
|
||||
uint8_t bitmask;
|
||||
uint8_t invflags;
|
||||
__u8 bitmask;
|
||||
__u8 invflags;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef __LINUX_BRIDGE_EBT_AMONG_H
|
||||
#define __LINUX_BRIDGE_EBT_AMONG_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define EBT_AMONG_DST 0x01
|
||||
#define EBT_AMONG_SRC 0x02
|
||||
|
||||
@@ -30,7 +32,7 @@
|
||||
*/
|
||||
|
||||
struct ebt_mac_wormhash_tuple {
|
||||
uint32_t cmp[2];
|
||||
__u32 cmp[2];
|
||||
__be32 ip;
|
||||
};
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef __LINUX_BRIDGE_EBT_ARP_H
|
||||
#define __LINUX_BRIDGE_EBT_ARP_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define EBT_ARP_OPCODE 0x01
|
||||
#define EBT_ARP_HTYPE 0x02
|
||||
#define EBT_ARP_PTYPE 0x04
|
||||
@@ -27,8 +29,8 @@ struct ebt_arp_info
|
||||
unsigned char smmsk[ETH_ALEN];
|
||||
unsigned char dmaddr[ETH_ALEN];
|
||||
unsigned char dmmsk[ETH_ALEN];
|
||||
uint8_t bitmask;
|
||||
uint8_t invflags;
|
||||
__u8 bitmask;
|
||||
__u8 invflags;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
#ifndef __LINUX_BRIDGE_EBT_IP_H
|
||||
#define __LINUX_BRIDGE_EBT_IP_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define EBT_IP_SOURCE 0x01
|
||||
#define EBT_IP_DEST 0x02
|
||||
#define EBT_IP_TOS 0x04
|
||||
@@ -31,12 +33,12 @@ struct ebt_ip_info {
|
||||
__be32 daddr;
|
||||
__be32 smsk;
|
||||
__be32 dmsk;
|
||||
uint8_t tos;
|
||||
uint8_t protocol;
|
||||
uint8_t bitmask;
|
||||
uint8_t invflags;
|
||||
uint16_t sport[2];
|
||||
uint16_t dport[2];
|
||||
__u8 tos;
|
||||
__u8 protocol;
|
||||
__u8 bitmask;
|
||||
__u8 invflags;
|
||||
__u16 sport[2];
|
||||
__u16 dport[2];
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -12,14 +12,19 @@
|
||||
#ifndef __LINUX_BRIDGE_EBT_IP6_H
|
||||
#define __LINUX_BRIDGE_EBT_IP6_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define EBT_IP6_SOURCE 0x01
|
||||
#define EBT_IP6_DEST 0x02
|
||||
#define EBT_IP6_TCLASS 0x04
|
||||
#define EBT_IP6_PROTO 0x08
|
||||
#define EBT_IP6_SPORT 0x10
|
||||
#define EBT_IP6_DPORT 0x20
|
||||
#define EBT_IP6_ICMP6 0x40
|
||||
|
||||
#define EBT_IP6_MASK (EBT_IP6_SOURCE | EBT_IP6_DEST | EBT_IP6_TCLASS |\
|
||||
EBT_IP6_PROTO | EBT_IP6_SPORT | EBT_IP6_DPORT)
|
||||
EBT_IP6_PROTO | EBT_IP6_SPORT | EBT_IP6_DPORT | \
|
||||
EBT_IP6_ICMP6)
|
||||
#define EBT_IP6_MATCH "ip6"
|
||||
|
||||
/* the same values are used for the invflags */
|
||||
@@ -28,12 +33,18 @@ struct ebt_ip6_info {
|
||||
struct in6_addr daddr;
|
||||
struct in6_addr smsk;
|
||||
struct in6_addr dmsk;
|
||||
uint8_t tclass;
|
||||
uint8_t protocol;
|
||||
uint8_t bitmask;
|
||||
uint8_t invflags;
|
||||
uint16_t sport[2];
|
||||
uint16_t dport[2];
|
||||
__u8 tclass;
|
||||
__u8 protocol;
|
||||
__u8 bitmask;
|
||||
__u8 invflags;
|
||||
union {
|
||||
__u16 sport[2];
|
||||
__u8 icmpv6_type[2];
|
||||
};
|
||||
union {
|
||||
__u16 dport[2];
|
||||
__u8 icmpv6_code[2];
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef __LINUX_BRIDGE_EBT_LIMIT_H
|
||||
#define __LINUX_BRIDGE_EBT_LIMIT_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define EBT_LIMIT_MATCH "limit"
|
||||
|
||||
/* timings are in milliseconds. */
|
||||
@@ -10,13 +12,13 @@
|
||||
seconds, or one every 59 hours. */
|
||||
|
||||
struct ebt_limit_info {
|
||||
u_int32_t avg; /* Average secs between packets * scale */
|
||||
u_int32_t burst; /* Period multiplier for upper limit. */
|
||||
__u32 avg; /* Average secs between packets * scale */
|
||||
__u32 burst; /* Period multiplier for upper limit. */
|
||||
|
||||
/* Used internally by the kernel */
|
||||
unsigned long prev;
|
||||
u_int32_t credit;
|
||||
u_int32_t credit_cap, cost;
|
||||
__u32 credit;
|
||||
__u32 credit_cap, cost;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef __LINUX_BRIDGE_EBT_LOG_H
|
||||
#define __LINUX_BRIDGE_EBT_LOG_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define EBT_LOG_IP 0x01 /* if the frame is made by ip, log the ip information */
|
||||
#define EBT_LOG_ARP 0x02
|
||||
#define EBT_LOG_NFLOG 0x04
|
||||
@@ -10,9 +12,9 @@
|
||||
#define EBT_LOG_WATCHER "log"
|
||||
|
||||
struct ebt_log_info {
|
||||
uint8_t loglevel;
|
||||
uint8_t prefix[EBT_LOG_PREFIX_SIZE];
|
||||
uint32_t bitmask;
|
||||
__u8 loglevel;
|
||||
__u8 prefix[EBT_LOG_PREFIX_SIZE];
|
||||
__u32 bitmask;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
#ifndef __LINUX_BRIDGE_EBT_MARK_M_H
|
||||
#define __LINUX_BRIDGE_EBT_MARK_M_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define EBT_MARK_AND 0x01
|
||||
#define EBT_MARK_OR 0x02
|
||||
#define EBT_MARK_MASK (EBT_MARK_AND | EBT_MARK_OR)
|
||||
struct ebt_mark_m_info {
|
||||
unsigned long mark, mask;
|
||||
uint8_t invert;
|
||||
uint8_t bitmask;
|
||||
__u8 invert;
|
||||
__u8 bitmask;
|
||||
};
|
||||
#define EBT_MARK_MATCH "mark_m"
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef __LINUX_BRIDGE_EBT_NFLOG_H
|
||||
#define __LINUX_BRIDGE_EBT_NFLOG_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define EBT_NFLOG_MASK 0x0
|
||||
|
||||
#define EBT_NFLOG_PREFIX_SIZE 64
|
||||
@@ -10,11 +12,11 @@
|
||||
#define EBT_NFLOG_DEFAULT_THRESHOLD 1
|
||||
|
||||
struct ebt_nflog_info {
|
||||
u_int32_t len;
|
||||
u_int16_t group;
|
||||
u_int16_t threshold;
|
||||
u_int16_t flags;
|
||||
u_int16_t pad;
|
||||
__u32 len;
|
||||
__u16 group;
|
||||
__u16 threshold;
|
||||
__u16 flags;
|
||||
__u16 pad;
|
||||
char prefix[EBT_NFLOG_PREFIX_SIZE];
|
||||
};
|
||||
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
#ifndef __LINUX_BRIDGE_EBT_PKTTYPE_H
|
||||
#define __LINUX_BRIDGE_EBT_PKTTYPE_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
struct ebt_pkttype_info {
|
||||
uint8_t pkt_type;
|
||||
uint8_t invert;
|
||||
__u8 pkt_type;
|
||||
__u8 invert;
|
||||
};
|
||||
#define EBT_PKTTYPE_MATCH "pkttype"
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef __LINUX_BRIDGE_EBT_STP_H
|
||||
#define __LINUX_BRIDGE_EBT_STP_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define EBT_STP_TYPE 0x0001
|
||||
|
||||
#define EBT_STP_FLAGS 0x0002
|
||||
@@ -21,24 +23,24 @@
|
||||
#define EBT_STP_MATCH "stp"
|
||||
|
||||
struct ebt_stp_config_info {
|
||||
uint8_t flags;
|
||||
uint16_t root_priol, root_priou;
|
||||
__u8 flags;
|
||||
__u16 root_priol, root_priou;
|
||||
char root_addr[6], root_addrmsk[6];
|
||||
uint32_t root_costl, root_costu;
|
||||
uint16_t sender_priol, sender_priou;
|
||||
__u32 root_costl, root_costu;
|
||||
__u16 sender_priol, sender_priou;
|
||||
char sender_addr[6], sender_addrmsk[6];
|
||||
uint16_t portl, portu;
|
||||
uint16_t msg_agel, msg_ageu;
|
||||
uint16_t max_agel, max_ageu;
|
||||
uint16_t hello_timel, hello_timeu;
|
||||
uint16_t forward_delayl, forward_delayu;
|
||||
__u16 portl, portu;
|
||||
__u16 msg_agel, msg_ageu;
|
||||
__u16 max_agel, max_ageu;
|
||||
__u16 hello_timel, hello_timeu;
|
||||
__u16 forward_delayl, forward_delayu;
|
||||
};
|
||||
|
||||
struct ebt_stp_info {
|
||||
uint8_t type;
|
||||
__u8 type;
|
||||
struct ebt_stp_config_info config;
|
||||
uint16_t bitmask;
|
||||
uint16_t invflags;
|
||||
__u16 bitmask;
|
||||
__u16 invflags;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef _EBT_ULOG_H
|
||||
#define _EBT_ULOG_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define EBT_ULOG_DEFAULT_NLGROUP 0
|
||||
#define EBT_ULOG_DEFAULT_QTHRESHOLD 1
|
||||
#define EBT_ULOG_MAXNLGROUPS 32 /* hardcoded netlink max */
|
||||
@@ -10,7 +12,7 @@
|
||||
#define EBT_ULOG_VERSION 1
|
||||
|
||||
struct ebt_ulog_info {
|
||||
uint32_t nlgroup;
|
||||
__u32 nlgroup;
|
||||
unsigned int cprange;
|
||||
unsigned int qthreshold;
|
||||
char prefix[EBT_ULOG_PREFIX_LEN];
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef __LINUX_BRIDGE_EBT_VLAN_H
|
||||
#define __LINUX_BRIDGE_EBT_VLAN_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define EBT_VLAN_ID 0x01
|
||||
#define EBT_VLAN_PRIO 0x02
|
||||
#define EBT_VLAN_ENCAP 0x04
|
||||
@@ -8,12 +10,12 @@
|
||||
#define EBT_VLAN_MATCH "vlan"
|
||||
|
||||
struct ebt_vlan_info {
|
||||
uint16_t id; /* VLAN ID {1-4095} */
|
||||
uint8_t prio; /* VLAN User Priority {0-7} */
|
||||
__u16 id; /* VLAN ID {1-4095} */
|
||||
__u8 prio; /* VLAN User Priority {0-7} */
|
||||
__be16 encap; /* VLAN Encapsulated frame code {0-65535} */
|
||||
uint8_t bitmask; /* Args bitmask bit 1=1 - ID arg,
|
||||
__u8 bitmask; /* Args bitmask bit 1=1 - ID arg,
|
||||
bit 2=1 User-Priority arg, bit 3=1 encap*/
|
||||
uint8_t invflags; /* Inverse bitmask bit 1=1 - inversed ID arg,
|
||||
__u8 invflags; /* Inverse bitmask bit 1=1 - inversed ID arg,
|
||||
bit 2=1 - inversed Pirority arg */
|
||||
};
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef _IPT_CLUSTERIP_H_target
|
||||
#define _IPT_CLUSTERIP_H_target
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
enum clusterip_hashmode {
|
||||
CLUSTERIP_HASHMODE_SIP = 0,
|
||||
CLUSTERIP_HASHMODE_SIP_SPT,
|
||||
@@ -17,15 +19,15 @@ struct clusterip_config;
|
||||
|
||||
struct ipt_clusterip_tgt_info {
|
||||
|
||||
u_int32_t flags;
|
||||
__u32 flags;
|
||||
|
||||
/* only relevant for new ones */
|
||||
u_int8_t clustermac[6];
|
||||
u_int16_t num_total_nodes;
|
||||
u_int16_t num_local_nodes;
|
||||
u_int16_t local_nodes[CLUSTERIP_MAX_NODES];
|
||||
u_int32_t hash_mode;
|
||||
u_int32_t hash_initval;
|
||||
__u8 clustermac[6];
|
||||
__u16 num_total_nodes;
|
||||
__u16 num_local_nodes;
|
||||
__u16 local_nodes[CLUSTERIP_MAX_NODES];
|
||||
__u32 hash_mode;
|
||||
__u32 hash_initval;
|
||||
|
||||
/* Used internally by the kernel */
|
||||
struct clusterip_config *config;
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
*/
|
||||
#ifndef _IPT_ECN_TARGET_H
|
||||
#define _IPT_ECN_TARGET_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/netfilter/xt_DSCP.h>
|
||||
|
||||
#define IPT_ECN_IP_MASK (~XT_DSCP_MASK)
|
||||
@@ -19,11 +21,11 @@
|
||||
#define IPT_ECN_OP_MASK 0xce
|
||||
|
||||
struct ipt_ECN_info {
|
||||
u_int8_t operation; /* bitset of operations */
|
||||
u_int8_t ip_ect; /* ECT codepoint of IPv4 header, pre-shifted */
|
||||
__u8 operation; /* bitset of operations */
|
||||
__u8 ip_ect; /* ECT codepoint of IPv4 header, pre-shifted */
|
||||
union {
|
||||
struct {
|
||||
u_int8_t ece:1, cwr:1; /* TCP ECT bits */
|
||||
__u8 ece:1, cwr:1; /* TCP ECT bits */
|
||||
} tcp;
|
||||
} proto;
|
||||
};
|
||||
|
||||
@@ -1,15 +1,17 @@
|
||||
#ifndef _IPT_SAME_H
|
||||
#define _IPT_SAME_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define IPT_SAME_MAX_RANGE 10
|
||||
|
||||
#define IPT_SAME_NODST 0x01
|
||||
|
||||
struct ipt_same_info {
|
||||
unsigned char info;
|
||||
u_int32_t rangesize;
|
||||
u_int32_t ipnum;
|
||||
u_int32_t *iparray;
|
||||
__u32 rangesize;
|
||||
__u32 ipnum;
|
||||
__u32 *iparray;
|
||||
|
||||
/* hangs off end. */
|
||||
struct nf_nat_range range[IPT_SAME_MAX_RANGE];
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
#ifndef _IPT_TTL_H
|
||||
#define _IPT_TTL_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
enum {
|
||||
IPT_TTL_SET = 0,
|
||||
IPT_TTL_INC,
|
||||
@@ -13,8 +15,8 @@ enum {
|
||||
#define IPT_TTL_MAXMODE IPT_TTL_DEC
|
||||
|
||||
struct ipt_TTL_info {
|
||||
u_int8_t mode;
|
||||
u_int8_t ttl;
|
||||
__u8 mode;
|
||||
__u8 ttl;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef _IPT_ADDRTYPE_H
|
||||
#define _IPT_ADDRTYPE_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
enum {
|
||||
IPT_ADDRTYPE_INVERT_SOURCE = 0x0001,
|
||||
IPT_ADDRTYPE_INVERT_DEST = 0x0002,
|
||||
@@ -9,17 +11,17 @@ enum {
|
||||
};
|
||||
|
||||
struct ipt_addrtype_info_v1 {
|
||||
u_int16_t source; /* source-type mask */
|
||||
u_int16_t dest; /* dest-type mask */
|
||||
u_int32_t flags;
|
||||
__u16 source; /* source-type mask */
|
||||
__u16 dest; /* dest-type mask */
|
||||
__u32 flags;
|
||||
};
|
||||
|
||||
/* revision 0 */
|
||||
struct ipt_addrtype_info {
|
||||
u_int16_t source; /* source-type mask */
|
||||
u_int16_t dest; /* dest-type mask */
|
||||
u_int32_t invert_source;
|
||||
u_int32_t invert_dest;
|
||||
__u16 source; /* source-type mask */
|
||||
__u16 dest; /* dest-type mask */
|
||||
__u32 invert_source;
|
||||
__u32 invert_dest;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
#ifndef _IPT_AH_H
|
||||
#define _IPT_AH_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
struct ipt_ah {
|
||||
u_int32_t spis[2]; /* Security Parameter Index */
|
||||
u_int8_t invflags; /* Inverse flags */
|
||||
__u32 spis[2]; /* Security Parameter Index */
|
||||
__u8 invflags; /* Inverse flags */
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
*/
|
||||
#ifndef _IPT_ECN_H
|
||||
#define _IPT_ECN_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/netfilter/xt_dscp.h>
|
||||
|
||||
#define IPT_ECN_IP_MASK (~XT_DSCP_MASK)
|
||||
@@ -20,12 +22,12 @@
|
||||
|
||||
/* match info */
|
||||
struct ipt_ecn_info {
|
||||
u_int8_t operation;
|
||||
u_int8_t invert;
|
||||
u_int8_t ip_ect;
|
||||
__u8 operation;
|
||||
__u8 invert;
|
||||
__u8 ip_ect;
|
||||
union {
|
||||
struct {
|
||||
u_int8_t ect;
|
||||
__u8 ect;
|
||||
} tcp;
|
||||
} proto;
|
||||
};
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
#ifndef _IPT_TTL_H
|
||||
#define _IPT_TTL_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
enum {
|
||||
IPT_TTL_EQ = 0, /* equals */
|
||||
IPT_TTL_NE, /* not equals */
|
||||
@@ -13,8 +15,8 @@ enum {
|
||||
|
||||
|
||||
struct ipt_ttl_info {
|
||||
u_int8_t mode;
|
||||
u_int8_t ttl;
|
||||
__u8 mode;
|
||||
__u8 ttl;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
#ifndef _IP6T_HL_H
|
||||
#define _IP6T_HL_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
enum {
|
||||
IP6T_HL_SET = 0,
|
||||
IP6T_HL_INC,
|
||||
@@ -14,8 +16,8 @@ enum {
|
||||
#define IP6T_HL_MAXMODE IP6T_HL_DEC
|
||||
|
||||
struct ip6t_HL_info {
|
||||
u_int8_t mode;
|
||||
u_int8_t hop_limit;
|
||||
__u8 mode;
|
||||
__u8 hop_limit;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef _IP6T_REJECT_H
|
||||
#define _IP6T_REJECT_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
enum ip6t_reject_with {
|
||||
IP6T_ICMP6_NO_ROUTE,
|
||||
IP6T_ICMP6_ADM_PROHIBITED,
|
||||
@@ -12,7 +14,7 @@ enum ip6t_reject_with {
|
||||
};
|
||||
|
||||
struct ip6t_reject_info {
|
||||
u_int32_t with; /* reject type */
|
||||
__u32 with; /* reject type */
|
||||
};
|
||||
|
||||
#endif /*_IP6T_REJECT_H*/
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
#ifndef _IP6T_AH_H
|
||||
#define _IP6T_AH_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
struct ip6t_ah {
|
||||
u_int32_t spis[2]; /* Security Parameter Index */
|
||||
u_int32_t hdrlen; /* Header Length */
|
||||
u_int8_t hdrres; /* Test of the Reserved Filed */
|
||||
u_int8_t invflags; /* Inverse flags */
|
||||
__u32 spis[2]; /* Security Parameter Index */
|
||||
__u32 hdrlen; /* Header Length */
|
||||
__u8 hdrres; /* Test of the Reserved Filed */
|
||||
__u8 invflags; /* Inverse flags */
|
||||
};
|
||||
|
||||
#define IP6T_AH_SPI 0x01
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
#ifndef _IP6T_FRAG_H
|
||||
#define _IP6T_FRAG_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
struct ip6t_frag {
|
||||
u_int32_t ids[2]; /* Security Parameter Index */
|
||||
u_int32_t hdrlen; /* Header Length */
|
||||
u_int8_t flags; /* */
|
||||
u_int8_t invflags; /* Inverse flags */
|
||||
__u32 ids[2]; /* Security Parameter Index */
|
||||
__u32 hdrlen; /* Header Length */
|
||||
__u8 flags; /* */
|
||||
__u8 invflags; /* Inverse flags */
|
||||
};
|
||||
|
||||
#define IP6T_FRAG_IDS 0x01
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
#ifndef _IP6T_HL_H
|
||||
#define _IP6T_HL_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
enum {
|
||||
IP6T_HL_EQ = 0, /* equals */
|
||||
IP6T_HL_NE, /* not equals */
|
||||
@@ -14,8 +16,8 @@ enum {
|
||||
|
||||
|
||||
struct ip6t_hl_info {
|
||||
u_int8_t mode;
|
||||
u_int8_t hop_limit;
|
||||
__u8 mode;
|
||||
__u8 hop_limit;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -8,10 +8,12 @@ on whether they contain certain headers */
|
||||
#ifndef __IPV6HEADER_H
|
||||
#define __IPV6HEADER_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
struct ip6t_ipv6header_info {
|
||||
u_int8_t matchflags;
|
||||
u_int8_t invflags;
|
||||
u_int8_t modeflag;
|
||||
__u8 matchflags;
|
||||
__u8 invflags;
|
||||
__u8 modeflag;
|
||||
};
|
||||
|
||||
#define MASK_HOPOPTS 128
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
#ifndef _IP6T_MH_H
|
||||
#define _IP6T_MH_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/* MH matching stuff */
|
||||
struct ip6t_mh {
|
||||
u_int8_t types[2]; /* MH type range */
|
||||
u_int8_t invflags; /* Inverse flags */
|
||||
__u8 types[2]; /* MH type range */
|
||||
__u8 invflags; /* Inverse flags */
|
||||
};
|
||||
|
||||
/* Values for "invflags" field in struct ip6t_mh. */
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
#ifndef _IP6T_OPTS_H
|
||||
#define _IP6T_OPTS_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define IP6T_OPTS_OPTSNR 16
|
||||
|
||||
struct ip6t_opts {
|
||||
u_int32_t hdrlen; /* Header Length */
|
||||
u_int8_t flags; /* */
|
||||
u_int8_t invflags; /* Inverse flags */
|
||||
u_int16_t opts[IP6T_OPTS_OPTSNR]; /* opts */
|
||||
u_int8_t optsnr; /* Nr of OPts */
|
||||
__u32 hdrlen; /* Header Length */
|
||||
__u8 flags; /* */
|
||||
__u8 invflags; /* Inverse flags */
|
||||
__u16 opts[IP6T_OPTS_OPTSNR]; /* opts */
|
||||
__u8 optsnr; /* Nr of OPts */
|
||||
};
|
||||
|
||||
#define IP6T_OPTS_LEN 0x01
|
||||
|
||||
@@ -1,18 +1,19 @@
|
||||
#ifndef _IP6T_RT_H
|
||||
#define _IP6T_RT_H
|
||||
|
||||
#include <linux/types.h>
|
||||
/*#include <linux/in6.h>*/
|
||||
|
||||
#define IP6T_RT_HOPS 16
|
||||
|
||||
struct ip6t_rt {
|
||||
u_int32_t rt_type; /* Routing Type */
|
||||
u_int32_t segsleft[2]; /* Segments Left */
|
||||
u_int32_t hdrlen; /* Header Length */
|
||||
u_int8_t flags; /* */
|
||||
u_int8_t invflags; /* Inverse flags */
|
||||
__u32 rt_type; /* Routing Type */
|
||||
__u32 segsleft[2]; /* Segments Left */
|
||||
__u32 hdrlen; /* Header Length */
|
||||
__u8 flags; /* */
|
||||
__u8 invflags; /* Inverse flags */
|
||||
struct in6_addr addrs[IP6T_RT_HOPS]; /* Hops */
|
||||
u_int8_t addrnr; /* Nr of Addresses */
|
||||
__u8 addrnr; /* Nr of Addresses */
|
||||
};
|
||||
|
||||
#define IP6T_RT_TYP 0x01
|
||||
|
||||
@@ -160,10 +160,6 @@ struct netlink_skb_parms {
|
||||
struct ucred creds; /* Skb credentials */
|
||||
__u32 pid;
|
||||
__u32 dst_group;
|
||||
kernel_cap_t eff_cap;
|
||||
__u32 loginuid; /* Login (audit) uid */
|
||||
__u32 sessionid; /* Session id (audit) */
|
||||
__u32 sid; /* SELinux security id */
|
||||
};
|
||||
|
||||
#define NETLINK_CB(skb) (*(struct netlink_skb_parms*)&((skb)->cb))
|
||||
|
||||
@@ -1243,6 +1243,8 @@ enum nl80211_rate_info {
|
||||
* @NL80211_STA_INFO_LLID: the station's mesh LLID
|
||||
* @NL80211_STA_INFO_PLID: the station's mesh PLID
|
||||
* @NL80211_STA_INFO_PLINK_STATE: peer link state for the station
|
||||
* @NL80211_STA_INFO_RX_BITRATE: last unicast data frame rx rate, nested
|
||||
* attribute, like NL80211_STA_INFO_TX_BITRATE.
|
||||
* @__NL80211_STA_INFO_AFTER_LAST: internal
|
||||
* @NL80211_STA_INFO_MAX: highest possible station info attribute
|
||||
*/
|
||||
@@ -1261,6 +1263,7 @@ enum nl80211_sta_info {
|
||||
NL80211_STA_INFO_TX_RETRIES,
|
||||
NL80211_STA_INFO_TX_FAILED,
|
||||
NL80211_STA_INFO_SIGNAL_AVG,
|
||||
NL80211_STA_INFO_RX_BITRATE,
|
||||
|
||||
/* keep last */
|
||||
__NL80211_STA_INFO_AFTER_LAST,
|
||||
|
||||
@@ -1479,6 +1479,7 @@ void pci_request_acs(void);
|
||||
#define PCI_VPD_RO_KEYWORD_PARTNO "PN"
|
||||
#define PCI_VPD_RO_KEYWORD_MFR_ID "MN"
|
||||
#define PCI_VPD_RO_KEYWORD_VENDOR0 "V0"
|
||||
#define PCI_VPD_RO_KEYWORD_CHKSUM "RV"
|
||||
|
||||
/**
|
||||
* pci_vpd_lrdt_size - Extracts the Large Resource Data Type length
|
||||
|
||||
@@ -36,9 +36,7 @@
|
||||
/* Socket options for SOL_PNPIPE level */
|
||||
#define PNPIPE_ENCAP 1
|
||||
#define PNPIPE_IFINDEX 2
|
||||
#define PNPIPE_PIPE_HANDLE 3
|
||||
#define PNPIPE_ENABLE 4
|
||||
/* unused slot */
|
||||
#define PNPIPE_HANDLE 3
|
||||
|
||||
#define PNADDR_ANY 0
|
||||
#define PNADDR_BROADCAST 0xFC
|
||||
|
||||
@@ -247,6 +247,35 @@ struct tc_gred_sopt {
|
||||
__u16 pad1;
|
||||
};
|
||||
|
||||
/* CHOKe section */
|
||||
|
||||
enum {
|
||||
TCA_CHOKE_UNSPEC,
|
||||
TCA_CHOKE_PARMS,
|
||||
TCA_CHOKE_STAB,
|
||||
__TCA_CHOKE_MAX,
|
||||
};
|
||||
|
||||
#define TCA_CHOKE_MAX (__TCA_CHOKE_MAX - 1)
|
||||
|
||||
struct tc_choke_qopt {
|
||||
__u32 limit; /* Hard queue length (packets) */
|
||||
__u32 qth_min; /* Min average threshold (packets) */
|
||||
__u32 qth_max; /* Max average threshold (packets) */
|
||||
unsigned char Wlog; /* log(W) */
|
||||
unsigned char Plog; /* log(P_max/(qth_max-qth_min)) */
|
||||
unsigned char Scell_log; /* cell size for idle damping */
|
||||
unsigned char flags; /* see RED flags */
|
||||
};
|
||||
|
||||
struct tc_choke_xstats {
|
||||
__u32 early; /* Early drops */
|
||||
__u32 pdrop; /* Drops due to queue limits */
|
||||
__u32 other; /* Drops due to drop() calls */
|
||||
__u32 marked; /* Marked packets */
|
||||
__u32 matched; /* Drops due to flow match */
|
||||
};
|
||||
|
||||
/* HTB section */
|
||||
#define TC_HTB_NUMPRIO 8
|
||||
#define TC_HTB_MAXDEPTH 8
|
||||
@@ -435,6 +464,7 @@ enum {
|
||||
TCA_NETEM_DELAY_DIST,
|
||||
TCA_NETEM_REORDER,
|
||||
TCA_NETEM_CORRUPT,
|
||||
TCA_NETEM_LOSS,
|
||||
__TCA_NETEM_MAX,
|
||||
};
|
||||
|
||||
@@ -465,7 +495,33 @@ struct tc_netem_corrupt {
|
||||
__u32 correlation;
|
||||
};
|
||||
|
||||
enum {
|
||||
NETEM_LOSS_UNSPEC,
|
||||
NETEM_LOSS_GI, /* General Intuitive - 4 state model */
|
||||
NETEM_LOSS_GE, /* Gilbert Elliot models */
|
||||
__NETEM_LOSS_MAX
|
||||
};
|
||||
#define NETEM_LOSS_MAX (__NETEM_LOSS_MAX - 1)
|
||||
|
||||
/* State transition probablities for 4 state model */
|
||||
struct tc_netem_gimodel {
|
||||
__u32 p13;
|
||||
__u32 p31;
|
||||
__u32 p32;
|
||||
__u32 p14;
|
||||
__u32 p23;
|
||||
};
|
||||
|
||||
/* Gilbert-Elliot models */
|
||||
struct tc_netem_gemodel {
|
||||
__u32 p;
|
||||
__u32 r;
|
||||
__u32 h;
|
||||
__u32 k1;
|
||||
};
|
||||
|
||||
#define NETEM_DIST_SCALE 8192
|
||||
#define NETEM_DIST_MAX 16384
|
||||
|
||||
/* DRR */
|
||||
|
||||
@@ -481,4 +537,55 @@ struct tc_drr_stats {
|
||||
__u32 deficit;
|
||||
};
|
||||
|
||||
/* MQPRIO */
|
||||
#define TC_QOPT_BITMASK 15
|
||||
#define TC_QOPT_MAX_QUEUE 16
|
||||
|
||||
struct tc_mqprio_qopt {
|
||||
__u8 num_tc;
|
||||
__u8 prio_tc_map[TC_QOPT_BITMASK + 1];
|
||||
__u8 hw;
|
||||
__u16 count[TC_QOPT_MAX_QUEUE];
|
||||
__u16 offset[TC_QOPT_MAX_QUEUE];
|
||||
};
|
||||
|
||||
/* SFB */
|
||||
|
||||
enum {
|
||||
TCA_SFB_UNSPEC,
|
||||
TCA_SFB_PARMS,
|
||||
__TCA_SFB_MAX,
|
||||
};
|
||||
|
||||
#define TCA_SFB_MAX (__TCA_SFB_MAX - 1)
|
||||
|
||||
/*
|
||||
* Note: increment, decrement are Q0.16 fixed-point values.
|
||||
*/
|
||||
struct tc_sfb_qopt {
|
||||
__u32 rehash_interval; /* delay between hash move, in ms */
|
||||
__u32 warmup_time; /* double buffering warmup time in ms (warmup_time < rehash_interval) */
|
||||
__u32 max; /* max len of qlen_min */
|
||||
__u32 bin_size; /* maximum queue length per bin */
|
||||
__u32 increment; /* probability increment, (d1 in Blue) */
|
||||
__u32 decrement; /* probability decrement, (d2 in Blue) */
|
||||
__u32 limit; /* max SFB queue length */
|
||||
__u32 penalty_rate; /* inelastic flows are rate limited to 'rate' pps */
|
||||
__u32 penalty_burst;
|
||||
};
|
||||
|
||||
struct tc_sfb_xstats {
|
||||
__u32 earlydrop;
|
||||
__u32 penaltydrop;
|
||||
__u32 bucketdrop;
|
||||
__u32 queuedrop;
|
||||
__u32 childdrop; /* drops in child qdisc */
|
||||
__u32 marked;
|
||||
__u32 maxqlen;
|
||||
__u32 maxprob;
|
||||
__u32 avgprob;
|
||||
};
|
||||
|
||||
#define SFB_MAX_PROB 0xFFFF
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1626,7 +1626,7 @@ struct security_operations {
|
||||
int (*xfrm_policy_lookup) (struct xfrm_sec_ctx *ctx, u32 fl_secid, u8 dir);
|
||||
int (*xfrm_state_pol_flow_match) (struct xfrm_state *x,
|
||||
struct xfrm_policy *xp,
|
||||
struct flowi *fl);
|
||||
const struct flowi *fl);
|
||||
int (*xfrm_decode_session) (struct sk_buff *skb, u32 *secid, int ckall);
|
||||
#endif /* CONFIG_SECURITY_NETWORK_XFRM */
|
||||
|
||||
@@ -2767,7 +2767,8 @@ int security_xfrm_state_delete(struct xfrm_state *x);
|
||||
void security_xfrm_state_free(struct xfrm_state *x);
|
||||
int security_xfrm_policy_lookup(struct xfrm_sec_ctx *ctx, u32 fl_secid, u8 dir);
|
||||
int security_xfrm_state_pol_flow_match(struct xfrm_state *x,
|
||||
struct xfrm_policy *xp, struct flowi *fl);
|
||||
struct xfrm_policy *xp,
|
||||
const struct flowi *fl);
|
||||
int security_xfrm_decode_session(struct sk_buff *skb, u32 *secid);
|
||||
void security_skb_classify_flow(struct sk_buff *skb, struct flowi *fl);
|
||||
|
||||
@@ -2819,7 +2820,7 @@ static inline int security_xfrm_policy_lookup(struct xfrm_sec_ctx *ctx, u32 fl_s
|
||||
}
|
||||
|
||||
static inline int security_xfrm_state_pol_flow_match(struct xfrm_state *x,
|
||||
struct xfrm_policy *xp, struct flowi *fl)
|
||||
struct xfrm_policy *xp, const struct flowi *fl)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
+11
-5
@@ -388,10 +388,7 @@ struct sk_buff {
|
||||
kmemcheck_bitfield_begin(flags2);
|
||||
__u16 queue_mapping:16;
|
||||
#ifdef CONFIG_IPV6_NDISC_NODETYPE
|
||||
__u8 ndisc_nodetype:2,
|
||||
deliver_no_wcard:1;
|
||||
#else
|
||||
__u8 deliver_no_wcard:1;
|
||||
__u8 ndisc_nodetype:2;
|
||||
#endif
|
||||
__u8 ooo_okay:1;
|
||||
kmemcheck_bitfield_end(flags2);
|
||||
@@ -1801,6 +1798,15 @@ static inline int pskb_trim_rcsum(struct sk_buff *skb, unsigned int len)
|
||||
prefetch(skb->prev), (skb != (struct sk_buff *)(queue)); \
|
||||
skb = skb->prev)
|
||||
|
||||
#define skb_queue_reverse_walk_safe(queue, skb, tmp) \
|
||||
for (skb = (queue)->prev, tmp = skb->prev; \
|
||||
skb != (struct sk_buff *)(queue); \
|
||||
skb = tmp, tmp = skb->prev)
|
||||
|
||||
#define skb_queue_reverse_walk_from_safe(queue, skb, tmp) \
|
||||
for (tmp = skb->prev; \
|
||||
skb != (struct sk_buff *)(queue); \
|
||||
skb = tmp, tmp = skb->prev)
|
||||
|
||||
static inline bool skb_has_frag_list(const struct sk_buff *skb)
|
||||
{
|
||||
@@ -1868,7 +1874,7 @@ extern void skb_split(struct sk_buff *skb,
|
||||
extern int skb_shift(struct sk_buff *tgt, struct sk_buff *skb,
|
||||
int shiftlen);
|
||||
|
||||
extern struct sk_buff *skb_segment(struct sk_buff *skb, int features);
|
||||
extern struct sk_buff *skb_segment(struct sk_buff *skb, u32 features);
|
||||
|
||||
static inline void *skb_header_pointer(const struct sk_buff *skb, int offset,
|
||||
int len, void *buffer)
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
/* Linux-specific socket ioctls */
|
||||
#define SIOCINQ FIONREAD
|
||||
#define SIOCOUTQ TIOCOUTQ
|
||||
#define SIOCOUTQ TIOCOUTQ /* output queue size (not sent + not acked) */
|
||||
|
||||
/* Routing table calls. */
|
||||
#define SIOCADDRT 0x890B /* add routing table entry */
|
||||
@@ -83,6 +83,8 @@
|
||||
|
||||
#define SIOCWANDEV 0x894A /* get/set netdev parameters */
|
||||
|
||||
#define SIOCOUTQNSD 0x894B /* output queue size (not sent only) */
|
||||
|
||||
/* ARP cache control calls. */
|
||||
/* 0x8950 - 0x8952 * obsolete calls, don't re-use */
|
||||
#define SIOCDARP 0x8953 /* delete ARP table entry */
|
||||
|
||||
@@ -85,6 +85,8 @@
|
||||
#define SSB_IMSTATE_AP_RSV 0x00000030 /* Reserved */
|
||||
#define SSB_IMSTATE_IBE 0x00020000 /* In Band Error */
|
||||
#define SSB_IMSTATE_TO 0x00040000 /* Timeout */
|
||||
#define SSB_IMSTATE_BUSY 0x01800000 /* Busy (Backplane rev >= 2.3 only) */
|
||||
#define SSB_IMSTATE_REJECT 0x02000000 /* Reject (Backplane rev >= 2.3 only) */
|
||||
#define SSB_INTVEC 0x0F94 /* SB Interrupt Mask */
|
||||
#define SSB_INTVEC_PCI 0x00000001 /* Enable interrupts for PCI */
|
||||
#define SSB_INTVEC_ENET0 0x00000002 /* Enable interrupts for enet 0 */
|
||||
@@ -97,7 +99,6 @@
|
||||
#define SSB_TMSLOW_RESET 0x00000001 /* Reset */
|
||||
#define SSB_TMSLOW_REJECT_22 0x00000002 /* Reject (Backplane rev 2.2) */
|
||||
#define SSB_TMSLOW_REJECT_23 0x00000004 /* Reject (Backplane rev 2.3) */
|
||||
#define SSB_TMSLOW_PHYCLK 0x00000010 /* MAC PHY Clock Control Enable */
|
||||
#define SSB_TMSLOW_CLOCK 0x00010000 /* Clock Enable */
|
||||
#define SSB_TMSLOW_FGC 0x00020000 /* Force Gated Clocks On */
|
||||
#define SSB_TMSLOW_PE 0x40000000 /* Power Management Enable */
|
||||
@@ -268,6 +269,8 @@
|
||||
/* SPROM Revision 4 */
|
||||
#define SSB_SPROM4_BFLLO 0x0044 /* Boardflags (low 16 bits) */
|
||||
#define SSB_SPROM4_BFLHI 0x0046 /* Board Flags Hi */
|
||||
#define SSB_SPROM4_BFL2LO 0x0048 /* Board flags 2 (low 16 bits) */
|
||||
#define SSB_SPROM4_BFL2HI 0x004A /* Board flags 2 Hi */
|
||||
#define SSB_SPROM4_IL0MAC 0x004C /* 6 byte MAC address for a/b/g/n */
|
||||
#define SSB_SPROM4_CCODE 0x0052 /* Country Code (2 bytes) */
|
||||
#define SSB_SPROM4_GPIOA 0x0056 /* Gen. Purpose IO # 0 and 1 */
|
||||
@@ -358,6 +361,8 @@
|
||||
#define SSB_SPROM5_CCODE 0x0044 /* Country Code (2 bytes) */
|
||||
#define SSB_SPROM5_BFLLO 0x004A /* Boardflags (low 16 bits) */
|
||||
#define SSB_SPROM5_BFLHI 0x004C /* Board Flags Hi */
|
||||
#define SSB_SPROM5_BFL2LO 0x004E /* Board flags 2 (low 16 bits) */
|
||||
#define SSB_SPROM5_BFL2HI 0x0050 /* Board flags 2 Hi */
|
||||
#define SSB_SPROM5_IL0MAC 0x0052 /* 6 byte MAC address for a/b/g/n */
|
||||
#define SSB_SPROM5_GPIOA 0x0076 /* Gen. Purpose IO # 0 and 1 */
|
||||
#define SSB_SPROM5_GPIOA_P0 0x00FF /* Pin 0 */
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* include/linux/tipc.h: Include file for TIPC socket interface
|
||||
*
|
||||
* Copyright (c) 2003-2006, Ericsson AB
|
||||
* Copyright (c) 2005, Wind River Systems
|
||||
* Copyright (c) 2005, 2010-2011, Wind River Systems
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -130,12 +130,6 @@ static inline unsigned int tipc_node(__u32 addr)
|
||||
#define TIPC_SUB_PORTS 0x01 /* filter for port availability */
|
||||
#define TIPC_SUB_SERVICE 0x02 /* filter for service availability */
|
||||
#define TIPC_SUB_CANCEL 0x04 /* cancel a subscription */
|
||||
#if 0
|
||||
/* The following filter options are not currently implemented */
|
||||
#define TIPC_SUB_NO_BIND_EVTS 0x04 /* filter out "publish" events */
|
||||
#define TIPC_SUB_NO_UNBIND_EVTS 0x08 /* filter out "withdraw" events */
|
||||
#define TIPC_SUB_SINGLE_EVT 0x10 /* expire after first event */
|
||||
#endif
|
||||
|
||||
#define TIPC_WAIT_FOREVER (~0) /* timeout for permanent subscription */
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* include/linux/tipc_config.h: Include file for TIPC configuration interface
|
||||
*
|
||||
* Copyright (c) 2003-2006, Ericsson AB
|
||||
* Copyright (c) 2005-2007, Wind River Systems
|
||||
* Copyright (c) 2005-2007, 2010-2011, Wind River Systems
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -76,13 +76,6 @@
|
||||
#define TIPC_CMD_SHOW_LINK_STATS 0x000B /* tx link_name, rx ultra_string */
|
||||
#define TIPC_CMD_SHOW_STATS 0x000F /* tx unsigned, rx ultra_string */
|
||||
|
||||
#if 0
|
||||
#define TIPC_CMD_SHOW_PORT_STATS 0x0008 /* tx port_ref, rx ultra_string */
|
||||
#define TIPC_CMD_RESET_PORT_STATS 0x0009 /* tx port_ref, rx none */
|
||||
#define TIPC_CMD_GET_ROUTES 0x000A /* tx ?, rx ? */
|
||||
#define TIPC_CMD_GET_LINK_PEER 0x000D /* tx link_name, rx ? */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Protected commands:
|
||||
* May only be issued by "network administration capable" process.
|
||||
@@ -96,7 +89,7 @@
|
||||
#define TIPC_CMD_GET_MAX_SUBSCR 0x4006 /* tx none, rx unsigned */
|
||||
#define TIPC_CMD_GET_MAX_ZONES 0x4007 /* obsoleted */
|
||||
#define TIPC_CMD_GET_MAX_CLUSTERS 0x4008 /* obsoleted */
|
||||
#define TIPC_CMD_GET_MAX_NODES 0x4009 /* tx none, rx unsigned */
|
||||
#define TIPC_CMD_GET_MAX_NODES 0x4009 /* obsoleted */
|
||||
#define TIPC_CMD_GET_MAX_SLAVES 0x400A /* obsoleted */
|
||||
#define TIPC_CMD_GET_NETID 0x400B /* tx none, rx unsigned */
|
||||
|
||||
@@ -109,13 +102,6 @@
|
||||
#define TIPC_CMD_DUMP_LOG 0x410B /* tx none, rx ultra_string */
|
||||
#define TIPC_CMD_RESET_LINK_STATS 0x410C /* tx link_name, rx none */
|
||||
|
||||
#if 0
|
||||
#define TIPC_CMD_CREATE_LINK 0x4103 /* tx link_create, rx none */
|
||||
#define TIPC_CMD_REMOVE_LINK 0x4104 /* tx link_name, rx none */
|
||||
#define TIPC_CMD_BLOCK_LINK 0x4105 /* tx link_name, rx none */
|
||||
#define TIPC_CMD_UNBLOCK_LINK 0x4106 /* tx link_name, rx none */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Private commands:
|
||||
* May only be issued by "network administration capable" process.
|
||||
@@ -123,16 +109,13 @@
|
||||
*/
|
||||
|
||||
#define TIPC_CMD_SET_NODE_ADDR 0x8001 /* tx net_addr, rx none */
|
||||
#if 0
|
||||
#define TIPC_CMD_SET_ZONE_MASTER 0x8002 /* tx none, rx none */
|
||||
#endif
|
||||
#define TIPC_CMD_SET_REMOTE_MNG 0x8003 /* tx unsigned, rx none */
|
||||
#define TIPC_CMD_SET_MAX_PORTS 0x8004 /* tx unsigned, rx none */
|
||||
#define TIPC_CMD_SET_MAX_PUBL 0x8005 /* tx unsigned, rx none */
|
||||
#define TIPC_CMD_SET_MAX_SUBSCR 0x8006 /* tx unsigned, rx none */
|
||||
#define TIPC_CMD_SET_MAX_ZONES 0x8007 /* obsoleted */
|
||||
#define TIPC_CMD_SET_MAX_CLUSTERS 0x8008 /* obsoleted */
|
||||
#define TIPC_CMD_SET_MAX_NODES 0x8009 /* tx unsigned, rx none */
|
||||
#define TIPC_CMD_SET_MAX_NODES 0x8009 /* obsoleted */
|
||||
#define TIPC_CMD_SET_MAX_SLAVES 0x800A /* obsoleted */
|
||||
#define TIPC_CMD_SET_NETID 0x800B /* tx unsigned, rx none */
|
||||
|
||||
@@ -193,6 +176,10 @@
|
||||
#define TIPC_DEF_LINK_TOL 1500
|
||||
#define TIPC_MAX_LINK_TOL 30000
|
||||
|
||||
#if (TIPC_MIN_LINK_TOL < 16)
|
||||
#error "TIPC_MIN_LINK_TOL is too small (abort limit may be NaN)"
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Link window limits (min, default, max), in packets
|
||||
*/
|
||||
@@ -215,7 +202,7 @@ struct tipc_link_info {
|
||||
|
||||
struct tipc_bearer_config {
|
||||
__be32 priority; /* Range [1,31]. Override per link */
|
||||
__be32 detect_scope;
|
||||
__be32 disc_domain; /* <Z.C.N> describing desired nodes */
|
||||
char name[TIPC_MAX_BEARER_NAME];
|
||||
};
|
||||
|
||||
@@ -247,15 +234,6 @@ struct tipc_name_table_query {
|
||||
#define TIPC_CFG_NOT_SUPPORTED "\x84" /* request is not supported by TIPC */
|
||||
#define TIPC_CFG_INVALID_VALUE "\x85" /* request has invalid argument value */
|
||||
|
||||
#if 0
|
||||
/* prototypes TLV structures for proposed commands */
|
||||
struct tipc_link_create {
|
||||
__u32 domain;
|
||||
struct tipc_media_addr peer_addr;
|
||||
char bearer_name[TIPC_MAX_BEARER_NAME];
|
||||
};
|
||||
#endif
|
||||
|
||||
/*
|
||||
* A TLV consists of a descriptor, followed by the TLV value.
|
||||
* TLV descriptor fields are stored in network byte order;
|
||||
|
||||
@@ -84,6 +84,16 @@ struct xfrm_replay_state {
|
||||
__u32 bitmap;
|
||||
};
|
||||
|
||||
struct xfrm_replay_state_esn {
|
||||
unsigned int bmp_len;
|
||||
__u32 oseq;
|
||||
__u32 seq;
|
||||
__u32 oseq_hi;
|
||||
__u32 seq_hi;
|
||||
__u32 replay_window;
|
||||
__u32 bmp[0];
|
||||
};
|
||||
|
||||
struct xfrm_algo {
|
||||
char alg_name[64];
|
||||
unsigned int alg_key_len; /* in bits */
|
||||
@@ -284,6 +294,7 @@ enum xfrm_attr_type_t {
|
||||
XFRMA_ALG_AUTH_TRUNC, /* struct xfrm_algo_auth */
|
||||
XFRMA_MARK, /* struct xfrm_mark */
|
||||
XFRMA_TFCPAD, /* __u32 */
|
||||
XFRMA_REPLAY_ESN_VAL, /* struct xfrm_replay_esn */
|
||||
__XFRMA_MAX
|
||||
|
||||
#define XFRMA_MAX (__XFRMA_MAX - 1)
|
||||
@@ -350,6 +361,8 @@ struct xfrm_usersa_info {
|
||||
#define XFRM_STATE_WILDRECV 8
|
||||
#define XFRM_STATE_ICMP 16
|
||||
#define XFRM_STATE_AF_UNSPEC 32
|
||||
#define XFRM_STATE_ALIGN4 64
|
||||
#define XFRM_STATE_ESN 128
|
||||
};
|
||||
|
||||
struct xfrm_usersa_id {
|
||||
|
||||
@@ -64,6 +64,11 @@ struct bt_security {
|
||||
|
||||
#define BT_DEFER_SETUP 7
|
||||
|
||||
#define BT_FLUSHABLE 8
|
||||
|
||||
#define BT_FLUSHABLE_OFF 0
|
||||
#define BT_FLUSHABLE_ON 1
|
||||
|
||||
#define BT_INFO(fmt, arg...) printk(KERN_INFO "Bluetooth: " fmt "\n" , ## arg)
|
||||
#define BT_ERR(fmt, arg...) printk(KERN_ERR "%s: " fmt "\n" , __func__ , ## arg)
|
||||
#define BT_DBG(fmt, arg...) pr_debug("%s: " fmt "\n" , __func__ , ## arg)
|
||||
@@ -200,4 +205,32 @@ extern void bt_sysfs_cleanup(void);
|
||||
|
||||
extern struct dentry *bt_debugfs;
|
||||
|
||||
#ifdef CONFIG_BT_L2CAP
|
||||
int l2cap_init(void);
|
||||
void l2cap_exit(void);
|
||||
#else
|
||||
static inline int l2cap_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void l2cap_exit(void)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BT_SCO
|
||||
int sco_init(void);
|
||||
void sco_exit(void);
|
||||
#else
|
||||
static inline int sco_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void sco_exit(void)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __BLUETOOTH_H */
|
||||
|
||||
@@ -76,6 +76,14 @@ enum {
|
||||
HCI_INQUIRY,
|
||||
|
||||
HCI_RAW,
|
||||
|
||||
HCI_SETUP,
|
||||
HCI_AUTO_OFF,
|
||||
HCI_MGMT,
|
||||
HCI_PAIRABLE,
|
||||
HCI_SERVICE_CACHE,
|
||||
HCI_LINK_KEYS,
|
||||
HCI_DEBUG_KEYS,
|
||||
};
|
||||
|
||||
/* HCI ioctl defines */
|
||||
@@ -111,6 +119,7 @@ enum {
|
||||
#define HCI_PAIRING_TIMEOUT (60000) /* 60 seconds */
|
||||
#define HCI_IDLE_TIMEOUT (6000) /* 6 seconds */
|
||||
#define HCI_INIT_TIMEOUT (10000) /* 10 seconds */
|
||||
#define HCI_CMD_TIMEOUT (1000) /* 1 seconds */
|
||||
|
||||
/* HCI data types */
|
||||
#define HCI_COMMAND_PKT 0x01
|
||||
@@ -150,6 +159,7 @@ enum {
|
||||
#define EDR_ESCO_MASK (ESCO_2EV3 | ESCO_3EV3 | ESCO_2EV5 | ESCO_3EV5)
|
||||
|
||||
/* ACL flags */
|
||||
#define ACL_START_NO_FLUSH 0x00
|
||||
#define ACL_CONT 0x01
|
||||
#define ACL_START 0x02
|
||||
#define ACL_ACTIVE_BCAST 0x04
|
||||
@@ -159,6 +169,8 @@ enum {
|
||||
#define SCO_LINK 0x00
|
||||
#define ACL_LINK 0x01
|
||||
#define ESCO_LINK 0x02
|
||||
/* Low Energy links do not have defined link type. Use invented one */
|
||||
#define LE_LINK 0x80
|
||||
|
||||
/* LMP features */
|
||||
#define LMP_3SLOT 0x01
|
||||
@@ -183,17 +195,25 @@ enum {
|
||||
#define LMP_PSCHEME 0x02
|
||||
#define LMP_PCONTROL 0x04
|
||||
|
||||
#define LMP_RSSI_INQ 0x40
|
||||
#define LMP_ESCO 0x80
|
||||
|
||||
#define LMP_EV4 0x01
|
||||
#define LMP_EV5 0x02
|
||||
#define LMP_LE 0x40
|
||||
|
||||
#define LMP_SNIFF_SUBR 0x02
|
||||
#define LMP_PAUSE_ENC 0x04
|
||||
#define LMP_EDR_ESCO_2M 0x20
|
||||
#define LMP_EDR_ESCO_3M 0x40
|
||||
#define LMP_EDR_3S_ESCO 0x80
|
||||
|
||||
#define LMP_EXT_INQ 0x01
|
||||
#define LMP_SIMPLE_PAIR 0x08
|
||||
#define LMP_NO_FLUSH 0x40
|
||||
|
||||
#define LMP_LSTO 0x01
|
||||
#define LMP_INQ_TX_PWR 0x02
|
||||
|
||||
/* Connection modes */
|
||||
#define HCI_CM_ACTIVE 0x0000
|
||||
@@ -225,6 +245,8 @@ enum {
|
||||
#define HCI_AT_GENERAL_BONDING_MITM 0x05
|
||||
|
||||
/* ----- HCI Commands ---- */
|
||||
#define HCI_OP_NOP 0x0000
|
||||
|
||||
#define HCI_OP_INQUIRY 0x0401
|
||||
struct hci_cp_inquiry {
|
||||
__u8 lap[3];
|
||||
@@ -292,11 +314,19 @@ struct hci_cp_pin_code_reply {
|
||||
__u8 pin_len;
|
||||
__u8 pin_code[16];
|
||||
} __packed;
|
||||
struct hci_rp_pin_code_reply {
|
||||
__u8 status;
|
||||
bdaddr_t bdaddr;
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_PIN_CODE_NEG_REPLY 0x040e
|
||||
struct hci_cp_pin_code_neg_reply {
|
||||
bdaddr_t bdaddr;
|
||||
} __packed;
|
||||
struct hci_rp_pin_code_neg_reply {
|
||||
__u8 status;
|
||||
bdaddr_t bdaddr;
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_CHANGE_CONN_PTYPE 0x040f
|
||||
struct hci_cp_change_conn_ptype {
|
||||
@@ -377,6 +407,31 @@ struct hci_cp_reject_sync_conn_req {
|
||||
__u8 reason;
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_IO_CAPABILITY_REPLY 0x042b
|
||||
struct hci_cp_io_capability_reply {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 capability;
|
||||
__u8 oob_data;
|
||||
__u8 authentication;
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_USER_CONFIRM_REPLY 0x042c
|
||||
struct hci_cp_user_confirm_reply {
|
||||
bdaddr_t bdaddr;
|
||||
} __packed;
|
||||
struct hci_rp_user_confirm_reply {
|
||||
__u8 status;
|
||||
bdaddr_t bdaddr;
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_USER_CONFIRM_NEG_REPLY 0x042d
|
||||
|
||||
#define HCI_OP_IO_CAPABILITY_NEG_REPLY 0x0434
|
||||
struct hci_cp_io_capability_neg_reply {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 reason;
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_SNIFF_MODE 0x0803
|
||||
struct hci_cp_sniff_mode {
|
||||
__le16 handle;
|
||||
@@ -474,6 +529,12 @@ struct hci_cp_set_event_flt {
|
||||
#define HCI_CONN_SETUP_AUTO_OFF 0x01
|
||||
#define HCI_CONN_SETUP_AUTO_ON 0x02
|
||||
|
||||
#define HCI_OP_DELETE_STORED_LINK_KEY 0x0c12
|
||||
struct hci_cp_delete_stored_link_key {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 delete_all;
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_WRITE_LOCAL_NAME 0x0c13
|
||||
struct hci_cp_write_local_name {
|
||||
__u8 name[248];
|
||||
@@ -537,6 +598,8 @@ struct hci_cp_host_buffer_size {
|
||||
__le16 sco_max_pkt;
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_WRITE_INQUIRY_MODE 0x0c45
|
||||
|
||||
#define HCI_OP_READ_SSP_MODE 0x0c55
|
||||
struct hci_rp_read_ssp_mode {
|
||||
__u8 status;
|
||||
@@ -548,6 +611,8 @@ struct hci_cp_write_ssp_mode {
|
||||
__u8 mode;
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_READ_INQ_RSP_TX_POWER 0x0c58
|
||||
|
||||
#define HCI_OP_READ_LOCAL_VERSION 0x1001
|
||||
struct hci_rp_read_local_version {
|
||||
__u8 status;
|
||||
@@ -593,6 +658,47 @@ struct hci_rp_read_bd_addr {
|
||||
bdaddr_t bdaddr;
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_LE_SET_EVENT_MASK 0x2001
|
||||
struct hci_cp_le_set_event_mask {
|
||||
__u8 mask[8];
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_LE_READ_BUFFER_SIZE 0x2002
|
||||
struct hci_rp_le_read_buffer_size {
|
||||
__u8 status;
|
||||
__le16 le_mtu;
|
||||
__u8 le_max_pkt;
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_LE_CREATE_CONN 0x200d
|
||||
struct hci_cp_le_create_conn {
|
||||
__le16 scan_interval;
|
||||
__le16 scan_window;
|
||||
__u8 filter_policy;
|
||||
__u8 peer_addr_type;
|
||||
bdaddr_t peer_addr;
|
||||
__u8 own_address_type;
|
||||
__le16 conn_interval_min;
|
||||
__le16 conn_interval_max;
|
||||
__le16 conn_latency;
|
||||
__le16 supervision_timeout;
|
||||
__le16 min_ce_len;
|
||||
__le16 max_ce_len;
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_LE_CREATE_CONN_CANCEL 0x200e
|
||||
|
||||
#define HCI_OP_LE_CONN_UPDATE 0x2013
|
||||
struct hci_cp_le_conn_update {
|
||||
__le16 handle;
|
||||
__le16 conn_interval_min;
|
||||
__le16 conn_interval_max;
|
||||
__le16 conn_latency;
|
||||
__le16 supervision_timeout;
|
||||
__le16 min_ce_len;
|
||||
__le16 max_ce_len;
|
||||
} __packed;
|
||||
|
||||
/* ---- HCI Events ---- */
|
||||
#define HCI_EV_INQUIRY_COMPLETE 0x01
|
||||
|
||||
@@ -833,6 +939,20 @@ struct hci_ev_io_capa_request {
|
||||
bdaddr_t bdaddr;
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_IO_CAPA_REPLY 0x32
|
||||
struct hci_ev_io_capa_reply {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 capability;
|
||||
__u8 oob_data;
|
||||
__u8 authentication;
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_USER_CONFIRM_REQUEST 0x33
|
||||
struct hci_ev_user_confirm_req {
|
||||
bdaddr_t bdaddr;
|
||||
__le32 passkey;
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_SIMPLE_PAIR_COMPLETE 0x36
|
||||
struct hci_ev_simple_pair_complete {
|
||||
__u8 status;
|
||||
@@ -845,6 +965,25 @@ struct hci_ev_remote_host_features {
|
||||
__u8 features[8];
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_LE_META 0x3e
|
||||
struct hci_ev_le_meta {
|
||||
__u8 subevent;
|
||||
} __packed;
|
||||
|
||||
/* Low energy meta events */
|
||||
#define HCI_EV_LE_CONN_COMPLETE 0x01
|
||||
struct hci_ev_le_conn_complete {
|
||||
__u8 status;
|
||||
__le16 handle;
|
||||
__u8 role;
|
||||
__u8 bdaddr_type;
|
||||
bdaddr_t bdaddr;
|
||||
__le16 interval;
|
||||
__le16 latency;
|
||||
__le16 supervision_timeout;
|
||||
__u8 clk_accurancy;
|
||||
} __packed;
|
||||
|
||||
/* Internal events generated by Bluetooth stack */
|
||||
#define HCI_EV_STACK_INTERNAL 0xfd
|
||||
struct hci_ev_stack_internal {
|
||||
|
||||
@@ -60,12 +60,28 @@ struct hci_conn_hash {
|
||||
spinlock_t lock;
|
||||
unsigned int acl_num;
|
||||
unsigned int sco_num;
|
||||
unsigned int le_num;
|
||||
};
|
||||
|
||||
struct bdaddr_list {
|
||||
struct list_head list;
|
||||
bdaddr_t bdaddr;
|
||||
};
|
||||
|
||||
struct bt_uuid {
|
||||
struct list_head list;
|
||||
u8 uuid[16];
|
||||
u8 svc_hint;
|
||||
};
|
||||
|
||||
struct link_key {
|
||||
struct list_head list;
|
||||
bdaddr_t bdaddr;
|
||||
u8 type;
|
||||
u8 val[16];
|
||||
u8 pin_len;
|
||||
};
|
||||
|
||||
#define NUM_REASSEMBLY 4
|
||||
struct hci_dev {
|
||||
struct list_head list;
|
||||
@@ -80,13 +96,18 @@ struct hci_dev {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 dev_name[248];
|
||||
__u8 dev_class[3];
|
||||
__u8 major_class;
|
||||
__u8 minor_class;
|
||||
__u8 features[8];
|
||||
__u8 commands[64];
|
||||
__u8 ssp_mode;
|
||||
__u8 hci_ver;
|
||||
__u16 hci_rev;
|
||||
__u8 lmp_ver;
|
||||
__u16 manufacturer;
|
||||
__le16 lmp_subver;
|
||||
__u16 voice_setting;
|
||||
__u8 io_capability;
|
||||
|
||||
__u16 pkt_type;
|
||||
__u16 esco_type;
|
||||
@@ -102,18 +123,26 @@ struct hci_dev {
|
||||
atomic_t cmd_cnt;
|
||||
unsigned int acl_cnt;
|
||||
unsigned int sco_cnt;
|
||||
unsigned int le_cnt;
|
||||
|
||||
unsigned int acl_mtu;
|
||||
unsigned int sco_mtu;
|
||||
unsigned int le_mtu;
|
||||
unsigned int acl_pkts;
|
||||
unsigned int sco_pkts;
|
||||
unsigned int le_pkts;
|
||||
|
||||
unsigned long cmd_last_tx;
|
||||
unsigned long acl_last_tx;
|
||||
unsigned long sco_last_tx;
|
||||
unsigned long le_last_tx;
|
||||
|
||||
struct workqueue_struct *workqueue;
|
||||
|
||||
struct work_struct power_on;
|
||||
struct work_struct power_off;
|
||||
struct timer_list off_timer;
|
||||
|
||||
struct timer_list cmd_timer;
|
||||
struct tasklet_struct cmd_task;
|
||||
struct tasklet_struct rx_task;
|
||||
struct tasklet_struct tx_task;
|
||||
@@ -129,12 +158,17 @@ struct hci_dev {
|
||||
wait_queue_head_t req_wait_q;
|
||||
__u32 req_status;
|
||||
__u32 req_result;
|
||||
__u16 req_last_cmd;
|
||||
|
||||
__u16 init_last_cmd;
|
||||
|
||||
struct inquiry_cache inq_cache;
|
||||
struct hci_conn_hash conn_hash;
|
||||
struct list_head blacklist;
|
||||
|
||||
struct list_head uuids;
|
||||
|
||||
struct list_head link_keys;
|
||||
|
||||
struct hci_dev_stats stat;
|
||||
|
||||
struct sk_buff_head driver_init;
|
||||
@@ -165,31 +199,37 @@ struct hci_dev {
|
||||
struct hci_conn {
|
||||
struct list_head list;
|
||||
|
||||
atomic_t refcnt;
|
||||
spinlock_t lock;
|
||||
atomic_t refcnt;
|
||||
spinlock_t lock;
|
||||
|
||||
bdaddr_t dst;
|
||||
__u16 handle;
|
||||
__u16 state;
|
||||
__u8 mode;
|
||||
__u8 type;
|
||||
__u8 out;
|
||||
__u8 attempt;
|
||||
__u8 dev_class[3];
|
||||
__u8 features[8];
|
||||
__u8 ssp_mode;
|
||||
__u16 interval;
|
||||
__u16 pkt_type;
|
||||
__u16 link_policy;
|
||||
__u32 link_mode;
|
||||
__u8 auth_type;
|
||||
__u8 sec_level;
|
||||
__u8 pending_sec_level;
|
||||
__u8 power_save;
|
||||
__u16 disc_timeout;
|
||||
unsigned long pend;
|
||||
bdaddr_t dst;
|
||||
__u16 handle;
|
||||
__u16 state;
|
||||
__u8 mode;
|
||||
__u8 type;
|
||||
__u8 out;
|
||||
__u8 attempt;
|
||||
__u8 dev_class[3];
|
||||
__u8 features[8];
|
||||
__u8 ssp_mode;
|
||||
__u16 interval;
|
||||
__u16 pkt_type;
|
||||
__u16 link_policy;
|
||||
__u32 link_mode;
|
||||
__u8 auth_type;
|
||||
__u8 sec_level;
|
||||
__u8 pending_sec_level;
|
||||
__u8 pin_length;
|
||||
__u8 io_capability;
|
||||
__u8 power_save;
|
||||
__u16 disc_timeout;
|
||||
unsigned long pend;
|
||||
|
||||
unsigned int sent;
|
||||
__u8 remote_cap;
|
||||
__u8 remote_oob;
|
||||
__u8 remote_auth;
|
||||
|
||||
unsigned int sent;
|
||||
|
||||
struct sk_buff_head data_q;
|
||||
|
||||
@@ -208,6 +248,10 @@ struct hci_conn {
|
||||
void *priv;
|
||||
|
||||
struct hci_conn *link;
|
||||
|
||||
void (*connect_cfm_cb) (struct hci_conn *conn, u8 status);
|
||||
void (*security_cfm_cb) (struct hci_conn *conn, u8 status);
|
||||
void (*disconn_cfm_cb) (struct hci_conn *conn, u8 reason);
|
||||
};
|
||||
|
||||
extern struct hci_proto *hci_proto[];
|
||||
@@ -274,24 +318,40 @@ static inline void hci_conn_hash_add(struct hci_dev *hdev, struct hci_conn *c)
|
||||
{
|
||||
struct hci_conn_hash *h = &hdev->conn_hash;
|
||||
list_add(&c->list, &h->list);
|
||||
if (c->type == ACL_LINK)
|
||||
switch (c->type) {
|
||||
case ACL_LINK:
|
||||
h->acl_num++;
|
||||
else
|
||||
break;
|
||||
case LE_LINK:
|
||||
h->le_num++;
|
||||
break;
|
||||
case SCO_LINK:
|
||||
case ESCO_LINK:
|
||||
h->sco_num++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static inline void hci_conn_hash_del(struct hci_dev *hdev, struct hci_conn *c)
|
||||
{
|
||||
struct hci_conn_hash *h = &hdev->conn_hash;
|
||||
list_del(&c->list);
|
||||
if (c->type == ACL_LINK)
|
||||
switch (c->type) {
|
||||
case ACL_LINK:
|
||||
h->acl_num--;
|
||||
else
|
||||
break;
|
||||
case LE_LINK:
|
||||
h->le_num--;
|
||||
break;
|
||||
case SCO_LINK:
|
||||
case ESCO_LINK:
|
||||
h->sco_num--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static inline struct hci_conn *hci_conn_hash_lookup_handle(struct hci_dev *hdev,
|
||||
__u16 handle)
|
||||
__u16 handle)
|
||||
{
|
||||
struct hci_conn_hash *h = &hdev->conn_hash;
|
||||
struct list_head *p;
|
||||
@@ -306,7 +366,7 @@ static inline struct hci_conn *hci_conn_hash_lookup_handle(struct hci_dev *hdev,
|
||||
}
|
||||
|
||||
static inline struct hci_conn *hci_conn_hash_lookup_ba(struct hci_dev *hdev,
|
||||
__u8 type, bdaddr_t *ba)
|
||||
__u8 type, bdaddr_t *ba)
|
||||
{
|
||||
struct hci_conn_hash *h = &hdev->conn_hash;
|
||||
struct list_head *p;
|
||||
@@ -321,7 +381,7 @@ static inline struct hci_conn *hci_conn_hash_lookup_ba(struct hci_dev *hdev,
|
||||
}
|
||||
|
||||
static inline struct hci_conn *hci_conn_hash_lookup_state(struct hci_dev *hdev,
|
||||
__u8 type, __u16 state)
|
||||
__u8 type, __u16 state)
|
||||
{
|
||||
struct hci_conn_hash *h = &hdev->conn_hash;
|
||||
struct list_head *p;
|
||||
@@ -437,6 +497,16 @@ int hci_inquiry(void __user *arg);
|
||||
struct bdaddr_list *hci_blacklist_lookup(struct hci_dev *hdev, bdaddr_t *bdaddr);
|
||||
int hci_blacklist_clear(struct hci_dev *hdev);
|
||||
|
||||
int hci_uuids_clear(struct hci_dev *hdev);
|
||||
|
||||
int hci_link_keys_clear(struct hci_dev *hdev);
|
||||
struct link_key *hci_find_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr);
|
||||
int hci_add_link_key(struct hci_dev *hdev, int new_key, bdaddr_t *bdaddr,
|
||||
u8 *key, u8 type, u8 pin_len);
|
||||
int hci_remove_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr);
|
||||
|
||||
void hci_del_off_timer(struct hci_dev *hdev);
|
||||
|
||||
void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb);
|
||||
|
||||
int hci_recv_frame(struct sk_buff *skb);
|
||||
@@ -458,6 +528,8 @@ void hci_conn_del_sysfs(struct hci_conn *conn);
|
||||
#define lmp_sniffsubr_capable(dev) ((dev)->features[5] & LMP_SNIFF_SUBR)
|
||||
#define lmp_esco_capable(dev) ((dev)->features[3] & LMP_ESCO)
|
||||
#define lmp_ssp_capable(dev) ((dev)->features[6] & LMP_SIMPLE_PAIR)
|
||||
#define lmp_no_flush_capable(dev) ((dev)->features[6] & LMP_NO_FLUSH)
|
||||
#define lmp_le_capable(dev) ((dev)->features[4] & LMP_LE)
|
||||
|
||||
/* ----- HCI protocols ----- */
|
||||
struct hci_proto {
|
||||
@@ -503,6 +575,9 @@ static inline void hci_proto_connect_cfm(struct hci_conn *conn, __u8 status)
|
||||
hp = hci_proto[HCI_PROTO_SCO];
|
||||
if (hp && hp->connect_cfm)
|
||||
hp->connect_cfm(conn, status);
|
||||
|
||||
if (conn->connect_cfm_cb)
|
||||
conn->connect_cfm_cb(conn, status);
|
||||
}
|
||||
|
||||
static inline int hci_proto_disconn_ind(struct hci_conn *conn)
|
||||
@@ -532,6 +607,9 @@ static inline void hci_proto_disconn_cfm(struct hci_conn *conn, __u8 reason)
|
||||
hp = hci_proto[HCI_PROTO_SCO];
|
||||
if (hp && hp->disconn_cfm)
|
||||
hp->disconn_cfm(conn, reason);
|
||||
|
||||
if (conn->disconn_cfm_cb)
|
||||
conn->disconn_cfm_cb(conn, reason);
|
||||
}
|
||||
|
||||
static inline void hci_proto_auth_cfm(struct hci_conn *conn, __u8 status)
|
||||
@@ -551,6 +629,9 @@ static inline void hci_proto_auth_cfm(struct hci_conn *conn, __u8 status)
|
||||
hp = hci_proto[HCI_PROTO_SCO];
|
||||
if (hp && hp->security_cfm)
|
||||
hp->security_cfm(conn, status, encrypt);
|
||||
|
||||
if (conn->security_cfm_cb)
|
||||
conn->security_cfm_cb(conn, status);
|
||||
}
|
||||
|
||||
static inline void hci_proto_encrypt_cfm(struct hci_conn *conn, __u8 status, __u8 encrypt)
|
||||
@@ -564,6 +645,9 @@ static inline void hci_proto_encrypt_cfm(struct hci_conn *conn, __u8 status, __u
|
||||
hp = hci_proto[HCI_PROTO_SCO];
|
||||
if (hp && hp->security_cfm)
|
||||
hp->security_cfm(conn, status, encrypt);
|
||||
|
||||
if (conn->security_cfm_cb)
|
||||
conn->security_cfm_cb(conn, status);
|
||||
}
|
||||
|
||||
int hci_register_proto(struct hci_proto *hproto);
|
||||
@@ -660,12 +744,29 @@ void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode);
|
||||
void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data);
|
||||
|
||||
/* ----- HCI Sockets ----- */
|
||||
void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb);
|
||||
void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb,
|
||||
struct sock *skip_sk);
|
||||
|
||||
/* Management interface */
|
||||
int mgmt_control(struct sock *sk, struct msghdr *msg, size_t len);
|
||||
int mgmt_index_added(u16 index);
|
||||
int mgmt_index_removed(u16 index);
|
||||
int mgmt_powered(u16 index, u8 powered);
|
||||
int mgmt_discoverable(u16 index, u8 discoverable);
|
||||
int mgmt_connectable(u16 index, u8 connectable);
|
||||
int mgmt_new_key(u16 index, struct link_key *key, u8 old_key_type);
|
||||
int mgmt_connected(u16 index, bdaddr_t *bdaddr);
|
||||
int mgmt_disconnected(u16 index, bdaddr_t *bdaddr);
|
||||
int mgmt_disconnect_failed(u16 index);
|
||||
int mgmt_connect_failed(u16 index, bdaddr_t *bdaddr, u8 status);
|
||||
int mgmt_pin_code_request(u16 index, bdaddr_t *bdaddr);
|
||||
int mgmt_pin_code_reply_complete(u16 index, bdaddr_t *bdaddr, u8 status);
|
||||
int mgmt_pin_code_neg_reply_complete(u16 index, bdaddr_t *bdaddr, u8 status);
|
||||
int mgmt_user_confirm_request(u16 index, bdaddr_t *bdaddr, __le32 value);
|
||||
int mgmt_user_confirm_reply_complete(u16 index, bdaddr_t *bdaddr, u8 status);
|
||||
int mgmt_user_confirm_neg_reply_complete(u16 index, bdaddr_t *bdaddr,
|
||||
u8 status);
|
||||
int mgmt_auth_failed(u16 index, bdaddr_t *bdaddr, u8 status);
|
||||
|
||||
/* HCI info for socket */
|
||||
#define hci_pi(sk) ((struct hci_pinfo *) sk)
|
||||
@@ -697,4 +798,6 @@ struct hci_sec_filter {
|
||||
|
||||
void hci_req_complete(struct hci_dev *hdev, __u16 cmd, int result);
|
||||
|
||||
void hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max,
|
||||
u16 latency, u16 to_multiplier);
|
||||
#endif /* __HCI_CORE_H */
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
#define L2CAP_DEFAULT_MAX_PDU_SIZE 1009 /* Sized for 3-DH5 packet */
|
||||
#define L2CAP_DEFAULT_ACK_TO 200
|
||||
#define L2CAP_LOCAL_BUSY_TRIES 12
|
||||
#define L2CAP_LE_DEFAULT_MTU 23
|
||||
|
||||
#define L2CAP_CONN_TIMEOUT (40000) /* 40 seconds */
|
||||
#define L2CAP_INFO_TIMEOUT (4000) /* 4 seconds */
|
||||
@@ -88,6 +89,8 @@ struct l2cap_conninfo {
|
||||
#define L2CAP_ECHO_RSP 0x09
|
||||
#define L2CAP_INFO_REQ 0x0a
|
||||
#define L2CAP_INFO_RSP 0x0b
|
||||
#define L2CAP_CONN_PARAM_UPDATE_REQ 0x12
|
||||
#define L2CAP_CONN_PARAM_UPDATE_RSP 0x13
|
||||
|
||||
/* L2CAP feature mask */
|
||||
#define L2CAP_FEAT_FLOWCTL 0x00000001
|
||||
@@ -160,6 +163,9 @@ struct l2cap_conn_rsp {
|
||||
/* channel indentifier */
|
||||
#define L2CAP_CID_SIGNALING 0x0001
|
||||
#define L2CAP_CID_CONN_LESS 0x0002
|
||||
#define L2CAP_CID_LE_DATA 0x0004
|
||||
#define L2CAP_CID_LE_SIGNALING 0x0005
|
||||
#define L2CAP_CID_SMP 0x0006
|
||||
#define L2CAP_CID_DYN_START 0x0040
|
||||
#define L2CAP_CID_DYN_END 0xffff
|
||||
|
||||
@@ -255,6 +261,21 @@ struct l2cap_info_rsp {
|
||||
#define L2CAP_IR_SUCCESS 0x0000
|
||||
#define L2CAP_IR_NOTSUPP 0x0001
|
||||
|
||||
struct l2cap_conn_param_update_req {
|
||||
__le16 min;
|
||||
__le16 max;
|
||||
__le16 latency;
|
||||
__le16 to_multiplier;
|
||||
} __packed;
|
||||
|
||||
struct l2cap_conn_param_update_rsp {
|
||||
__le16 result;
|
||||
} __packed;
|
||||
|
||||
/* Connection Parameters result */
|
||||
#define L2CAP_CONN_PARAM_ACCEPTED 0x0000
|
||||
#define L2CAP_CONN_PARAM_REJECTED 0x0001
|
||||
|
||||
/* ----- L2CAP connections ----- */
|
||||
struct l2cap_chan_list {
|
||||
struct sock *head;
|
||||
@@ -327,6 +348,7 @@ struct l2cap_pinfo {
|
||||
__u8 sec_level;
|
||||
__u8 role_switch;
|
||||
__u8 force_reliable;
|
||||
__u8 flushable;
|
||||
|
||||
__u8 conf_req[64];
|
||||
__u8 conf_len;
|
||||
@@ -423,6 +445,35 @@ static inline int l2cap_tx_window_full(struct sock *sk)
|
||||
#define __is_sframe(ctrl) ((ctrl) & L2CAP_CTRL_FRAME_TYPE)
|
||||
#define __is_sar_start(ctrl) (((ctrl) & L2CAP_CTRL_SAR) == L2CAP_SDU_START)
|
||||
|
||||
void l2cap_load(void);
|
||||
extern int disable_ertm;
|
||||
extern const struct proto_ops l2cap_sock_ops;
|
||||
extern struct bt_sock_list l2cap_sk_list;
|
||||
|
||||
int l2cap_init_sockets(void);
|
||||
void l2cap_cleanup_sockets(void);
|
||||
|
||||
u8 l2cap_get_ident(struct l2cap_conn *conn);
|
||||
void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, void *data);
|
||||
int l2cap_build_conf_req(struct sock *sk, void *data);
|
||||
int __l2cap_wait_ack(struct sock *sk);
|
||||
|
||||
struct sk_buff *l2cap_create_connless_pdu(struct sock *sk, struct msghdr *msg, size_t len);
|
||||
struct sk_buff *l2cap_create_basic_pdu(struct sock *sk, struct msghdr *msg, size_t len);
|
||||
struct sk_buff *l2cap_create_iframe_pdu(struct sock *sk, struct msghdr *msg, size_t len, u16 control, u16 sdulen);
|
||||
int l2cap_sar_segment_sdu(struct sock *sk, struct msghdr *msg, size_t len);
|
||||
void l2cap_do_send(struct sock *sk, struct sk_buff *skb);
|
||||
void l2cap_streaming_send(struct sock *sk);
|
||||
int l2cap_ertm_send(struct sock *sk);
|
||||
|
||||
void l2cap_sock_set_timer(struct sock *sk, long timeout);
|
||||
void l2cap_sock_clear_timer(struct sock *sk);
|
||||
void __l2cap_sock_close(struct sock *sk, int reason);
|
||||
void l2cap_sock_kill(struct sock *sk);
|
||||
void l2cap_sock_init(struct sock *sk, struct sock *parent);
|
||||
struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock,
|
||||
int proto, gfp_t prio);
|
||||
void l2cap_send_disconn_req(struct l2cap_conn *conn, struct sock *sk, int err);
|
||||
void l2cap_chan_del(struct sock *sk, int err);
|
||||
int l2cap_do_connect(struct sock *sk);
|
||||
|
||||
#endif /* __L2CAP_H */
|
||||
|
||||
+160
-11
@@ -21,11 +21,13 @@
|
||||
SOFTWARE IS DISCLAIMED.
|
||||
*/
|
||||
|
||||
#define MGMT_INDEX_NONE 0xFFFF
|
||||
|
||||
struct mgmt_hdr {
|
||||
__le16 opcode;
|
||||
__le16 index;
|
||||
__le16 len;
|
||||
} __packed;
|
||||
#define MGMT_HDR_SIZE 4
|
||||
|
||||
#define MGMT_OP_READ_VERSION 0x0001
|
||||
struct mgmt_rp_read_version {
|
||||
@@ -40,13 +42,10 @@ struct mgmt_rp_read_index_list {
|
||||
} __packed;
|
||||
|
||||
#define MGMT_OP_READ_INFO 0x0004
|
||||
struct mgmt_cp_read_info {
|
||||
__le16 index;
|
||||
} __packed;
|
||||
struct mgmt_rp_read_info {
|
||||
__le16 index;
|
||||
__u8 type;
|
||||
__u8 powered;
|
||||
__u8 connectable;
|
||||
__u8 discoverable;
|
||||
__u8 pairable;
|
||||
__u8 sec_mode;
|
||||
@@ -58,6 +57,116 @@ struct mgmt_rp_read_info {
|
||||
__u16 hci_rev;
|
||||
} __packed;
|
||||
|
||||
struct mgmt_mode {
|
||||
__u8 val;
|
||||
} __packed;
|
||||
|
||||
#define MGMT_OP_SET_POWERED 0x0005
|
||||
|
||||
#define MGMT_OP_SET_DISCOVERABLE 0x0006
|
||||
|
||||
#define MGMT_OP_SET_CONNECTABLE 0x0007
|
||||
|
||||
#define MGMT_OP_SET_PAIRABLE 0x0008
|
||||
|
||||
#define MGMT_OP_ADD_UUID 0x0009
|
||||
struct mgmt_cp_add_uuid {
|
||||
__u8 uuid[16];
|
||||
__u8 svc_hint;
|
||||
} __packed;
|
||||
|
||||
#define MGMT_OP_REMOVE_UUID 0x000A
|
||||
struct mgmt_cp_remove_uuid {
|
||||
__u8 uuid[16];
|
||||
} __packed;
|
||||
|
||||
#define MGMT_OP_SET_DEV_CLASS 0x000B
|
||||
struct mgmt_cp_set_dev_class {
|
||||
__u8 major;
|
||||
__u8 minor;
|
||||
} __packed;
|
||||
|
||||
#define MGMT_OP_SET_SERVICE_CACHE 0x000C
|
||||
struct mgmt_cp_set_service_cache {
|
||||
__u8 enable;
|
||||
} __packed;
|
||||
|
||||
struct mgmt_key_info {
|
||||
bdaddr_t bdaddr;
|
||||
u8 type;
|
||||
u8 val[16];
|
||||
u8 pin_len;
|
||||
} __packed;
|
||||
|
||||
#define MGMT_OP_LOAD_KEYS 0x000D
|
||||
struct mgmt_cp_load_keys {
|
||||
__u8 debug_keys;
|
||||
__le16 key_count;
|
||||
struct mgmt_key_info keys[0];
|
||||
} __packed;
|
||||
|
||||
#define MGMT_OP_REMOVE_KEY 0x000E
|
||||
struct mgmt_cp_remove_key {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 disconnect;
|
||||
} __packed;
|
||||
|
||||
#define MGMT_OP_DISCONNECT 0x000F
|
||||
struct mgmt_cp_disconnect {
|
||||
bdaddr_t bdaddr;
|
||||
} __packed;
|
||||
struct mgmt_rp_disconnect {
|
||||
bdaddr_t bdaddr;
|
||||
} __packed;
|
||||
|
||||
#define MGMT_OP_GET_CONNECTIONS 0x0010
|
||||
struct mgmt_rp_get_connections {
|
||||
__le16 conn_count;
|
||||
bdaddr_t conn[0];
|
||||
} __packed;
|
||||
|
||||
#define MGMT_OP_PIN_CODE_REPLY 0x0011
|
||||
struct mgmt_cp_pin_code_reply {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 pin_len;
|
||||
__u8 pin_code[16];
|
||||
} __packed;
|
||||
struct mgmt_rp_pin_code_reply {
|
||||
bdaddr_t bdaddr;
|
||||
uint8_t status;
|
||||
} __packed;
|
||||
|
||||
#define MGMT_OP_PIN_CODE_NEG_REPLY 0x0012
|
||||
struct mgmt_cp_pin_code_neg_reply {
|
||||
bdaddr_t bdaddr;
|
||||
} __packed;
|
||||
|
||||
#define MGMT_OP_SET_IO_CAPABILITY 0x0013
|
||||
struct mgmt_cp_set_io_capability {
|
||||
__u8 io_capability;
|
||||
} __packed;
|
||||
|
||||
#define MGMT_OP_PAIR_DEVICE 0x0014
|
||||
struct mgmt_cp_pair_device {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 io_cap;
|
||||
} __packed;
|
||||
struct mgmt_rp_pair_device {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 status;
|
||||
} __packed;
|
||||
|
||||
#define MGMT_OP_USER_CONFIRM_REPLY 0x0015
|
||||
struct mgmt_cp_user_confirm_reply {
|
||||
bdaddr_t bdaddr;
|
||||
} __packed;
|
||||
struct mgmt_rp_user_confirm_reply {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 status;
|
||||
} __packed;
|
||||
|
||||
#define MGMT_OP_USER_CONFIRM_NEG_REPLY 0x0016
|
||||
|
||||
#define MGMT_EV_CMD_COMPLETE 0x0001
|
||||
struct mgmt_ev_cmd_complete {
|
||||
__le16 opcode;
|
||||
@@ -72,16 +181,56 @@ struct mgmt_ev_cmd_status {
|
||||
|
||||
#define MGMT_EV_CONTROLLER_ERROR 0x0003
|
||||
struct mgmt_ev_controller_error {
|
||||
__le16 index;
|
||||
__u8 error_code;
|
||||
} __packed;
|
||||
|
||||
#define MGMT_EV_INDEX_ADDED 0x0004
|
||||
struct mgmt_ev_index_added {
|
||||
__le16 index;
|
||||
} __packed;
|
||||
|
||||
#define MGMT_EV_INDEX_REMOVED 0x0005
|
||||
struct mgmt_ev_index_removed {
|
||||
__le16 index;
|
||||
|
||||
#define MGMT_EV_POWERED 0x0006
|
||||
|
||||
#define MGMT_EV_DISCOVERABLE 0x0007
|
||||
|
||||
#define MGMT_EV_CONNECTABLE 0x0008
|
||||
|
||||
#define MGMT_EV_PAIRABLE 0x0009
|
||||
|
||||
#define MGMT_EV_NEW_KEY 0x000A
|
||||
struct mgmt_ev_new_key {
|
||||
struct mgmt_key_info key;
|
||||
__u8 old_key_type;
|
||||
} __packed;
|
||||
|
||||
#define MGMT_EV_CONNECTED 0x000B
|
||||
struct mgmt_ev_connected {
|
||||
bdaddr_t bdaddr;
|
||||
} __packed;
|
||||
|
||||
#define MGMT_EV_DISCONNECTED 0x000C
|
||||
struct mgmt_ev_disconnected {
|
||||
bdaddr_t bdaddr;
|
||||
} __packed;
|
||||
|
||||
#define MGMT_EV_CONNECT_FAILED 0x000D
|
||||
struct mgmt_ev_connect_failed {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 status;
|
||||
} __packed;
|
||||
|
||||
#define MGMT_EV_PIN_CODE_REQUEST 0x000E
|
||||
struct mgmt_ev_pin_code_request {
|
||||
bdaddr_t bdaddr;
|
||||
} __packed;
|
||||
|
||||
#define MGMT_EV_USER_CONFIRM_REQUEST 0x000F
|
||||
struct mgmt_ev_user_confirm_request {
|
||||
bdaddr_t bdaddr;
|
||||
__le32 value;
|
||||
} __packed;
|
||||
|
||||
#define MGMT_EV_AUTH_FAILED 0x0010
|
||||
struct mgmt_ev_auth_failed {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 status;
|
||||
} __packed;
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
#ifndef __SMP_H
|
||||
#define __SMP_H
|
||||
|
||||
struct smp_command_hdr {
|
||||
__u8 code;
|
||||
} __packed;
|
||||
|
||||
#define SMP_CMD_PAIRING_REQ 0x01
|
||||
#define SMP_CMD_PAIRING_RSP 0x02
|
||||
struct smp_cmd_pairing {
|
||||
__u8 io_capability;
|
||||
__u8 oob_flag;
|
||||
__u8 auth_req;
|
||||
__u8 max_key_size;
|
||||
__u8 init_key_dist;
|
||||
__u8 resp_key_dist;
|
||||
} __packed;
|
||||
|
||||
#define SMP_CMD_PAIRING_CONFIRM 0x03
|
||||
struct smp_cmd_pairing_confirm {
|
||||
__u8 confirm_val[16];
|
||||
} __packed;
|
||||
|
||||
#define SMP_CMD_PAIRING_RANDOM 0x04
|
||||
struct smp_cmd_pairing_random {
|
||||
__u8 rand_val[16];
|
||||
} __packed;
|
||||
|
||||
#define SMP_CMD_PAIRING_FAIL 0x05
|
||||
struct smp_cmd_pairing_fail {
|
||||
__u8 reason;
|
||||
} __packed;
|
||||
|
||||
#define SMP_CMD_ENCRYPT_INFO 0x06
|
||||
struct smp_cmd_encrypt_info {
|
||||
__u8 ltk[16];
|
||||
} __packed;
|
||||
|
||||
#define SMP_CMD_MASTER_IDENT 0x07
|
||||
struct smp_cmd_master_ident {
|
||||
__u16 ediv;
|
||||
__u8 rand[8];
|
||||
} __packed;
|
||||
|
||||
#define SMP_CMD_IDENT_INFO 0x08
|
||||
struct smp_cmd_ident_info {
|
||||
__u8 irk[16];
|
||||
} __packed;
|
||||
|
||||
#define SMP_CMD_IDENT_ADDR_INFO 0x09
|
||||
struct smp_cmd_ident_addr_info {
|
||||
__u8 addr_type;
|
||||
bdaddr_t bdaddr;
|
||||
} __packed;
|
||||
|
||||
#define SMP_CMD_SIGN_INFO 0x0a
|
||||
struct smp_cmd_sign_info {
|
||||
__u8 csrk[16];
|
||||
} __packed;
|
||||
|
||||
#define SMP_CMD_SECURITY_REQ 0x0b
|
||||
struct smp_cmd_security_req {
|
||||
__u8 auth_req;
|
||||
} __packed;
|
||||
|
||||
#define SMP_PASSKEY_ENTRY_FAILED 0x01
|
||||
#define SMP_OOB_NOT_AVAIL 0x02
|
||||
#define SMP_AUTH_REQUIREMENTS 0x03
|
||||
#define SMP_CONFIRM_FAILED 0x04
|
||||
#define SMP_PAIRING_NOTSUPP 0x05
|
||||
#define SMP_ENC_KEY_SIZE 0x06
|
||||
#define SMP_CMD_NOTSUPP 0x07
|
||||
#define SMP_UNSPECIFIED 0x08
|
||||
#define SMP_REPEATED_ATTEMPTS 0x09
|
||||
|
||||
#endif /* __SMP_H */
|
||||
+14
-2
@@ -413,7 +413,7 @@ struct station_parameters {
|
||||
* @STATION_INFO_PLID: @plid filled
|
||||
* @STATION_INFO_PLINK_STATE: @plink_state filled
|
||||
* @STATION_INFO_SIGNAL: @signal filled
|
||||
* @STATION_INFO_TX_BITRATE: @tx_bitrate fields are filled
|
||||
* @STATION_INFO_TX_BITRATE: @txrate fields are filled
|
||||
* (tx_bitrate, tx_bitrate_flags and tx_bitrate_mcs)
|
||||
* @STATION_INFO_RX_PACKETS: @rx_packets filled
|
||||
* @STATION_INFO_TX_PACKETS: @tx_packets filled
|
||||
@@ -421,6 +421,7 @@ struct station_parameters {
|
||||
* @STATION_INFO_TX_FAILED: @tx_failed filled
|
||||
* @STATION_INFO_RX_DROP_MISC: @rx_dropped_misc filled
|
||||
* @STATION_INFO_SIGNAL_AVG: @signal_avg filled
|
||||
* @STATION_INFO_RX_BITRATE: @rxrate fields are filled
|
||||
*/
|
||||
enum station_info_flags {
|
||||
STATION_INFO_INACTIVE_TIME = 1<<0,
|
||||
@@ -437,6 +438,7 @@ enum station_info_flags {
|
||||
STATION_INFO_TX_FAILED = 1<<11,
|
||||
STATION_INFO_RX_DROP_MISC = 1<<12,
|
||||
STATION_INFO_SIGNAL_AVG = 1<<13,
|
||||
STATION_INFO_RX_BITRATE = 1<<14,
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -506,6 +508,7 @@ struct station_info {
|
||||
s8 signal;
|
||||
s8 signal_avg;
|
||||
struct rate_info txrate;
|
||||
struct rate_info rxrate;
|
||||
u32 rx_packets;
|
||||
u32 tx_packets;
|
||||
u32 tx_retries;
|
||||
@@ -1194,6 +1197,10 @@ struct cfg80211_pmksa {
|
||||
* (also see nl80211.h @NL80211_ATTR_WIPHY_ANTENNA_TX).
|
||||
*
|
||||
* @get_antenna: Get current antenna configuration from device (tx_ant, rx_ant).
|
||||
*
|
||||
* @set_ringparam: Set tx and rx ring sizes.
|
||||
*
|
||||
* @get_ringparam: Get tx and rx ring current and maximum sizes.
|
||||
*/
|
||||
struct cfg80211_ops {
|
||||
int (*suspend)(struct wiphy *wiphy);
|
||||
@@ -1361,6 +1368,10 @@ struct cfg80211_ops {
|
||||
|
||||
int (*set_antenna)(struct wiphy *wiphy, u32 tx_ant, u32 rx_ant);
|
||||
int (*get_antenna)(struct wiphy *wiphy, u32 *tx_ant, u32 *rx_ant);
|
||||
|
||||
int (*set_ringparam)(struct wiphy *wiphy, u32 tx, u32 rx);
|
||||
void (*get_ringparam)(struct wiphy *wiphy,
|
||||
u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max);
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -1790,8 +1801,9 @@ static inline void *wdev_priv(struct wireless_dev *wdev)
|
||||
/**
|
||||
* ieee80211_channel_to_frequency - convert channel number to frequency
|
||||
* @chan: channel number
|
||||
* @band: band, necessary due to channel number overlap
|
||||
*/
|
||||
extern int ieee80211_channel_to_frequency(int chan);
|
||||
extern int ieee80211_channel_to_frequency(int chan, enum ieee80211_band band);
|
||||
|
||||
/**
|
||||
* ieee80211_frequency_to_channel - convert frequency to channel number
|
||||
|
||||
@@ -43,6 +43,8 @@ struct dcbnl_rtnl_ops {
|
||||
int (*ieee_setpfc) (struct net_device *, struct ieee_pfc *);
|
||||
int (*ieee_getapp) (struct net_device *, struct dcb_app *);
|
||||
int (*ieee_setapp) (struct net_device *, struct dcb_app *);
|
||||
int (*ieee_peer_getets) (struct net_device *, struct ieee_ets *);
|
||||
int (*ieee_peer_getpfc) (struct net_device *, struct ieee_pfc *);
|
||||
|
||||
/* CEE std */
|
||||
u8 (*getstate)(struct net_device *);
|
||||
@@ -77,7 +79,14 @@ struct dcbnl_rtnl_ops {
|
||||
u8 (*getdcbx)(struct net_device *);
|
||||
u8 (*setdcbx)(struct net_device *, u8);
|
||||
|
||||
/* peer apps */
|
||||
int (*peer_getappinfo)(struct net_device *, struct dcb_peer_app_info *,
|
||||
u16 *);
|
||||
int (*peer_getapptable)(struct net_device *, struct dcb_app *);
|
||||
|
||||
/* CEE peer */
|
||||
int (*cee_peer_getpg) (struct net_device *, struct cee_pg *);
|
||||
int (*cee_peer_getpfc) (struct net_device *, struct cee_pfc *);
|
||||
};
|
||||
|
||||
#endif /* __NET_DCBNL_H__ */
|
||||
|
||||
+3
-3
@@ -192,10 +192,10 @@ static inline void dn_dn2eth(unsigned char *ethaddr, __le16 addr)
|
||||
ethaddr[5] = (__u8)(a >> 8);
|
||||
}
|
||||
|
||||
static inline void dn_sk_ports_copy(struct flowi *fl, struct dn_scp *scp)
|
||||
static inline void dn_sk_ports_copy(struct flowidn *fld, struct dn_scp *scp)
|
||||
{
|
||||
fl->uli_u.dnports.sport = scp->addrloc;
|
||||
fl->uli_u.dnports.dport = scp->addrrem;
|
||||
fld->fld_sport = scp->addrloc;
|
||||
fld->fld_dport = scp->addrrem;
|
||||
}
|
||||
|
||||
extern unsigned dn_mss_from_pmtu(struct net_device *dev, int mtu);
|
||||
|
||||
@@ -98,7 +98,7 @@ struct dn_fib_table {
|
||||
int (*delete)(struct dn_fib_table *t, struct rtmsg *r,
|
||||
struct dn_kern_rta *rta, struct nlmsghdr *n,
|
||||
struct netlink_skb_parms *req);
|
||||
int (*lookup)(struct dn_fib_table *t, const struct flowi *fl,
|
||||
int (*lookup)(struct dn_fib_table *t, const struct flowidn *fld,
|
||||
struct dn_fib_res *res);
|
||||
int (*flush)(struct dn_fib_table *t);
|
||||
int (*dump)(struct dn_fib_table *t, struct sk_buff *skb, struct netlink_callback *cb);
|
||||
@@ -119,12 +119,12 @@ extern struct dn_fib_info *dn_fib_create_info(const struct rtmsg *r,
|
||||
struct dn_kern_rta *rta,
|
||||
const struct nlmsghdr *nlh, int *errp);
|
||||
extern int dn_fib_semantic_match(int type, struct dn_fib_info *fi,
|
||||
const struct flowi *fl,
|
||||
const struct flowidn *fld,
|
||||
struct dn_fib_res *res);
|
||||
extern void dn_fib_release_info(struct dn_fib_info *fi);
|
||||
extern __le16 dn_fib_get_attr16(struct rtattr *attr, int attrlen, int type);
|
||||
extern void dn_fib_flush(void);
|
||||
extern void dn_fib_select_multipath(const struct flowi *fl,
|
||||
extern void dn_fib_select_multipath(const struct flowidn *fld,
|
||||
struct dn_fib_res *res);
|
||||
|
||||
/*
|
||||
@@ -141,7 +141,7 @@ extern void dn_fib_table_cleanup(void);
|
||||
extern void dn_fib_rules_init(void);
|
||||
extern void dn_fib_rules_cleanup(void);
|
||||
extern unsigned dnet_addr_type(__le16 addr);
|
||||
extern int dn_fib_lookup(struct flowi *fl, struct dn_fib_res *res);
|
||||
extern int dn_fib_lookup(struct flowidn *fld, struct dn_fib_res *res);
|
||||
|
||||
extern int dn_fib_dump(struct sk_buff *skb, struct netlink_callback *cb);
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
*******************************************************************************/
|
||||
|
||||
extern struct sk_buff *dn_alloc_skb(struct sock *sk, int size, gfp_t pri);
|
||||
extern int dn_route_output_sock(struct dst_entry **pprt, struct flowi *, struct sock *sk, int flags);
|
||||
extern int dn_route_output_sock(struct dst_entry **pprt, struct flowidn *, struct sock *sk, int flags);
|
||||
extern int dn_cache_dump(struct sk_buff *skb, struct netlink_callback *cb);
|
||||
extern void dn_rt_cache_flush(int delay);
|
||||
|
||||
@@ -67,7 +67,7 @@ extern void dn_rt_cache_flush(int delay);
|
||||
struct dn_route {
|
||||
struct dst_entry dst;
|
||||
|
||||
struct flowi fl;
|
||||
struct flowidn fld;
|
||||
|
||||
__le16 rt_saddr;
|
||||
__le16 rt_daddr;
|
||||
@@ -82,12 +82,12 @@ struct dn_route {
|
||||
|
||||
static inline bool dn_is_input_route(struct dn_route *rt)
|
||||
{
|
||||
return rt->fl.iif != 0;
|
||||
return rt->fld.flowidn_iif != 0;
|
||||
}
|
||||
|
||||
static inline bool dn_is_output_route(struct dn_route *rt)
|
||||
{
|
||||
return rt->fl.iif == 0;
|
||||
return rt->fld.flowidn_iif == 0;
|
||||
}
|
||||
|
||||
extern void dn_route_init(void);
|
||||
|
||||
+87
-55
@@ -40,24 +40,10 @@ struct dst_entry {
|
||||
struct rcu_head rcu_head;
|
||||
struct dst_entry *child;
|
||||
struct net_device *dev;
|
||||
short error;
|
||||
short obsolete;
|
||||
int flags;
|
||||
#define DST_HOST 0x0001
|
||||
#define DST_NOXFRM 0x0002
|
||||
#define DST_NOPOLICY 0x0004
|
||||
#define DST_NOHASH 0x0008
|
||||
#define DST_NOCACHE 0x0010
|
||||
struct dst_ops *ops;
|
||||
unsigned long _metrics;
|
||||
unsigned long expires;
|
||||
|
||||
unsigned short header_len; /* more space at head required */
|
||||
unsigned short trailer_len; /* space to reserve at tail */
|
||||
|
||||
unsigned int rate_tokens;
|
||||
unsigned long rate_last; /* rate limiting for ICMP */
|
||||
|
||||
struct dst_entry *path;
|
||||
|
||||
struct neighbour *neighbour;
|
||||
struct hh_cache *hh;
|
||||
#ifdef CONFIG_XFRM
|
||||
@@ -68,17 +54,16 @@ struct dst_entry {
|
||||
int (*input)(struct sk_buff*);
|
||||
int (*output)(struct sk_buff*);
|
||||
|
||||
struct dst_ops *ops;
|
||||
|
||||
u32 _metrics[RTAX_MAX];
|
||||
|
||||
#ifdef CONFIG_NET_CLS_ROUTE
|
||||
short error;
|
||||
short obsolete;
|
||||
unsigned short header_len; /* more space at head required */
|
||||
unsigned short trailer_len; /* space to reserve at tail */
|
||||
#ifdef CONFIG_IP_ROUTE_CLASSID
|
||||
__u32 tclassid;
|
||||
#else
|
||||
__u32 __pad2;
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Align __refcnt to a 64 bytes alignment
|
||||
* (L1_CACHE_SIZE would be too much)
|
||||
@@ -93,6 +78,12 @@ struct dst_entry {
|
||||
atomic_t __refcnt; /* client references */
|
||||
int __use;
|
||||
unsigned long lastuse;
|
||||
int flags;
|
||||
#define DST_HOST 0x0001
|
||||
#define DST_NOXFRM 0x0002
|
||||
#define DST_NOPOLICY 0x0004
|
||||
#define DST_NOHASH 0x0008
|
||||
#define DST_NOCACHE 0x0010
|
||||
union {
|
||||
struct dst_entry *next;
|
||||
struct rtable __rcu *rt_next;
|
||||
@@ -103,10 +94,70 @@ struct dst_entry {
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
extern u32 *dst_cow_metrics_generic(struct dst_entry *dst, unsigned long old);
|
||||
extern const u32 dst_default_metrics[RTAX_MAX];
|
||||
|
||||
#define DST_METRICS_READ_ONLY 0x1UL
|
||||
#define __DST_METRICS_PTR(Y) \
|
||||
((u32 *)((Y) & ~DST_METRICS_READ_ONLY))
|
||||
#define DST_METRICS_PTR(X) __DST_METRICS_PTR((X)->_metrics)
|
||||
|
||||
static inline bool dst_metrics_read_only(const struct dst_entry *dst)
|
||||
{
|
||||
return dst->_metrics & DST_METRICS_READ_ONLY;
|
||||
}
|
||||
|
||||
extern void __dst_destroy_metrics_generic(struct dst_entry *dst, unsigned long old);
|
||||
|
||||
static inline void dst_destroy_metrics_generic(struct dst_entry *dst)
|
||||
{
|
||||
unsigned long val = dst->_metrics;
|
||||
if (!(val & DST_METRICS_READ_ONLY))
|
||||
__dst_destroy_metrics_generic(dst, val);
|
||||
}
|
||||
|
||||
static inline u32 *dst_metrics_write_ptr(struct dst_entry *dst)
|
||||
{
|
||||
unsigned long p = dst->_metrics;
|
||||
|
||||
if (p & DST_METRICS_READ_ONLY)
|
||||
return dst->ops->cow_metrics(dst, p);
|
||||
return __DST_METRICS_PTR(p);
|
||||
}
|
||||
|
||||
/* This may only be invoked before the entry has reached global
|
||||
* visibility.
|
||||
*/
|
||||
static inline void dst_init_metrics(struct dst_entry *dst,
|
||||
const u32 *src_metrics,
|
||||
bool read_only)
|
||||
{
|
||||
dst->_metrics = ((unsigned long) src_metrics) |
|
||||
(read_only ? DST_METRICS_READ_ONLY : 0);
|
||||
}
|
||||
|
||||
static inline void dst_copy_metrics(struct dst_entry *dest, const struct dst_entry *src)
|
||||
{
|
||||
u32 *dst_metrics = dst_metrics_write_ptr(dest);
|
||||
|
||||
if (dst_metrics) {
|
||||
u32 *src_metrics = DST_METRICS_PTR(src);
|
||||
|
||||
memcpy(dst_metrics, src_metrics, RTAX_MAX * sizeof(u32));
|
||||
}
|
||||
}
|
||||
|
||||
static inline u32 *dst_metrics_ptr(struct dst_entry *dst)
|
||||
{
|
||||
return DST_METRICS_PTR(dst);
|
||||
}
|
||||
|
||||
static inline u32
|
||||
dst_metric_raw(const struct dst_entry *dst, const int metric)
|
||||
{
|
||||
return dst->_metrics[metric-1];
|
||||
u32 *p = DST_METRICS_PTR(dst);
|
||||
|
||||
return p[metric-1];
|
||||
}
|
||||
|
||||
static inline u32
|
||||
@@ -131,22 +182,10 @@ dst_metric_advmss(const struct dst_entry *dst)
|
||||
|
||||
static inline void dst_metric_set(struct dst_entry *dst, int metric, u32 val)
|
||||
{
|
||||
dst->_metrics[metric-1] = val;
|
||||
}
|
||||
u32 *p = dst_metrics_write_ptr(dst);
|
||||
|
||||
static inline void dst_import_metrics(struct dst_entry *dst, const u32 *src_metrics)
|
||||
{
|
||||
memcpy(dst->_metrics, src_metrics, RTAX_MAX * sizeof(u32));
|
||||
}
|
||||
|
||||
static inline void dst_copy_metrics(struct dst_entry *dest, const struct dst_entry *src)
|
||||
{
|
||||
dst_import_metrics(dest, src->_metrics);
|
||||
}
|
||||
|
||||
static inline u32 *dst_metrics_ptr(struct dst_entry *dst)
|
||||
{
|
||||
return dst->_metrics;
|
||||
if (p)
|
||||
p[metric-1] = val;
|
||||
}
|
||||
|
||||
static inline u32
|
||||
@@ -181,8 +220,6 @@ static inline u32
|
||||
dst_allfrag(const struct dst_entry *dst)
|
||||
{
|
||||
int ret = dst_feature(dst, RTAX_FEATURE_ALLFRAG);
|
||||
/* Yes, _exactly_. This is paranoia. */
|
||||
barrier();
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -315,7 +352,7 @@ static inline struct dst_entry *skb_dst_pop(struct sk_buff *skb)
|
||||
}
|
||||
|
||||
extern int dst_discard(struct sk_buff *skb);
|
||||
extern void * dst_alloc(struct dst_ops * ops);
|
||||
extern void *dst_alloc(struct dst_ops * ops, int initial_ref);
|
||||
extern void __dst_free(struct dst_entry * dst);
|
||||
extern struct dst_entry *dst_destroy(struct dst_entry * dst);
|
||||
|
||||
@@ -384,27 +421,22 @@ extern void dst_init(void);
|
||||
|
||||
/* Flags for xfrm_lookup flags argument. */
|
||||
enum {
|
||||
XFRM_LOOKUP_WAIT = 1 << 0,
|
||||
XFRM_LOOKUP_ICMP = 1 << 1,
|
||||
XFRM_LOOKUP_ICMP = 1 << 0,
|
||||
};
|
||||
|
||||
struct flowi;
|
||||
#ifndef CONFIG_XFRM
|
||||
static inline int xfrm_lookup(struct net *net, struct dst_entry **dst_p,
|
||||
struct flowi *fl, struct sock *sk, int flags)
|
||||
static inline struct dst_entry *xfrm_lookup(struct net *net,
|
||||
struct dst_entry *dst_orig,
|
||||
const struct flowi *fl, struct sock *sk,
|
||||
int flags)
|
||||
{
|
||||
return 0;
|
||||
return dst_orig;
|
||||
}
|
||||
static inline int __xfrm_lookup(struct net *net, struct dst_entry **dst_p,
|
||||
struct flowi *fl, struct sock *sk, int flags)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
extern int xfrm_lookup(struct net *net, struct dst_entry **dst_p,
|
||||
struct flowi *fl, struct sock *sk, int flags);
|
||||
extern int __xfrm_lookup(struct net *net, struct dst_entry **dst_p,
|
||||
struct flowi *fl, struct sock *sk, int flags);
|
||||
extern struct dst_entry *xfrm_lookup(struct net *net, struct dst_entry *dst_orig,
|
||||
const struct flowi *fl, struct sock *sk,
|
||||
int flags);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user