mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 05:29:04 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (1958 commits) net: pack skb_shared_info more efficiently net_sched: red: split red_parms into parms and vars net_sched: sfq: extend limits cnic: Improve error recovery on bnx2x devices cnic: Re-init dev->stats_addr after chip reset net_sched: Bug in netem reordering bna: fix sparse warnings/errors bna: make ethtool_ops and strings const xgmac: cleanups net: make ethtool_ops const vmxnet3" make ethtool ops const xen-netback: make ops structs const virtio_net: Pass gfp flags when allocating rx buffers. ixgbe: FCoE: Add support for ndo_get_fcoe_hbainfo() call netdev: FCoE: Add new ndo_get_fcoe_hbainfo() call igb: reset PHY after recovering from PHY power down igb: add basic runtime PM support igb: Add support for byte queue limits. e1000: cleanup CE4100 MDIO registers access e1000: unmap ce4100_gbe_mdio_base_virt in e1000_remove ...
This commit is contained in:
commit
9753dfe19a
1398 changed files with 115824 additions and 74140 deletions
|
|
@ -185,6 +185,7 @@ header-y += if_pppol2tp.h
|
|||
header-y += if_pppox.h
|
||||
header-y += if_slip.h
|
||||
header-y += if_strip.h
|
||||
header-y += if_team.h
|
||||
header-y += if_tr.h
|
||||
header-y += if_tun.h
|
||||
header-y += if_tunnel.h
|
||||
|
|
@ -194,7 +195,9 @@ header-y += igmp.h
|
|||
header-y += in.h
|
||||
header-y += in6.h
|
||||
header-y += in_route.h
|
||||
header-y += sock_diag.h
|
||||
header-y += inet_diag.h
|
||||
header-y += unix_diag.h
|
||||
header-y += inotify.h
|
||||
header-y += input.h
|
||||
header-y += ioctl.h
|
||||
|
|
|
|||
|
|
@ -445,16 +445,6 @@ void vcc_insert_socket(struct sock *sk);
|
|||
|
||||
void atm_dev_release_vccs(struct atm_dev *dev);
|
||||
|
||||
/*
|
||||
* This is approximately the algorithm used by alloc_skb.
|
||||
*
|
||||
*/
|
||||
|
||||
static inline int atm_guess_pdu2truesize(int size)
|
||||
{
|
||||
return SKB_DATA_ALIGN(size) + sizeof(struct skb_shared_info);
|
||||
}
|
||||
|
||||
|
||||
static inline void atm_force_charge(struct atm_vcc *vcc,int truesize)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -205,61 +205,82 @@ struct bcma_bus {
|
|||
struct ssb_sprom sprom;
|
||||
};
|
||||
|
||||
extern inline u32 bcma_read8(struct bcma_device *core, u16 offset)
|
||||
static inline u32 bcma_read8(struct bcma_device *core, u16 offset)
|
||||
{
|
||||
return core->bus->ops->read8(core, offset);
|
||||
}
|
||||
extern inline u32 bcma_read16(struct bcma_device *core, u16 offset)
|
||||
static inline u32 bcma_read16(struct bcma_device *core, u16 offset)
|
||||
{
|
||||
return core->bus->ops->read16(core, offset);
|
||||
}
|
||||
extern inline u32 bcma_read32(struct bcma_device *core, u16 offset)
|
||||
static inline u32 bcma_read32(struct bcma_device *core, u16 offset)
|
||||
{
|
||||
return core->bus->ops->read32(core, offset);
|
||||
}
|
||||
extern inline
|
||||
static inline
|
||||
void bcma_write8(struct bcma_device *core, u16 offset, u32 value)
|
||||
{
|
||||
core->bus->ops->write8(core, offset, value);
|
||||
}
|
||||
extern inline
|
||||
static inline
|
||||
void bcma_write16(struct bcma_device *core, u16 offset, u32 value)
|
||||
{
|
||||
core->bus->ops->write16(core, offset, value);
|
||||
}
|
||||
extern inline
|
||||
static inline
|
||||
void bcma_write32(struct bcma_device *core, u16 offset, u32 value)
|
||||
{
|
||||
core->bus->ops->write32(core, offset, value);
|
||||
}
|
||||
#ifdef CONFIG_BCMA_BLOCKIO
|
||||
extern inline void bcma_block_read(struct bcma_device *core, void *buffer,
|
||||
static inline void bcma_block_read(struct bcma_device *core, void *buffer,
|
||||
size_t count, u16 offset, u8 reg_width)
|
||||
{
|
||||
core->bus->ops->block_read(core, buffer, count, offset, reg_width);
|
||||
}
|
||||
extern inline void bcma_block_write(struct bcma_device *core, const void *buffer,
|
||||
size_t count, u16 offset, u8 reg_width)
|
||||
static inline void bcma_block_write(struct bcma_device *core,
|
||||
const void *buffer, size_t count,
|
||||
u16 offset, u8 reg_width)
|
||||
{
|
||||
core->bus->ops->block_write(core, buffer, count, offset, reg_width);
|
||||
}
|
||||
#endif
|
||||
extern inline u32 bcma_aread32(struct bcma_device *core, u16 offset)
|
||||
static inline u32 bcma_aread32(struct bcma_device *core, u16 offset)
|
||||
{
|
||||
return core->bus->ops->aread32(core, offset);
|
||||
}
|
||||
extern inline
|
||||
static inline
|
||||
void bcma_awrite32(struct bcma_device *core, u16 offset, u32 value)
|
||||
{
|
||||
core->bus->ops->awrite32(core, offset, value);
|
||||
}
|
||||
|
||||
#define bcma_mask32(cc, offset, mask) \
|
||||
bcma_write32(cc, offset, bcma_read32(cc, offset) & (mask))
|
||||
#define bcma_set32(cc, offset, set) \
|
||||
bcma_write32(cc, offset, bcma_read32(cc, offset) | (set))
|
||||
#define bcma_maskset32(cc, offset, mask, set) \
|
||||
bcma_write32(cc, offset, (bcma_read32(cc, offset) & (mask)) | (set))
|
||||
static inline void bcma_mask32(struct bcma_device *cc, u16 offset, u32 mask)
|
||||
{
|
||||
bcma_write32(cc, offset, bcma_read32(cc, offset) & mask);
|
||||
}
|
||||
static inline void bcma_set32(struct bcma_device *cc, u16 offset, u32 set)
|
||||
{
|
||||
bcma_write32(cc, offset, bcma_read32(cc, offset) | set);
|
||||
}
|
||||
static inline void bcma_maskset32(struct bcma_device *cc,
|
||||
u16 offset, u32 mask, u32 set)
|
||||
{
|
||||
bcma_write32(cc, offset, (bcma_read32(cc, offset) & mask) | set);
|
||||
}
|
||||
static inline void bcma_mask16(struct bcma_device *cc, u16 offset, u16 mask)
|
||||
{
|
||||
bcma_write16(cc, offset, bcma_read16(cc, offset) & mask);
|
||||
}
|
||||
static inline void bcma_set16(struct bcma_device *cc, u16 offset, u16 set)
|
||||
{
|
||||
bcma_write16(cc, offset, bcma_read16(cc, offset) | set);
|
||||
}
|
||||
static inline void bcma_maskset16(struct bcma_device *cc,
|
||||
u16 offset, u16 mask, u16 set)
|
||||
{
|
||||
bcma_write16(cc, offset, (bcma_read16(cc, offset) & mask) | set);
|
||||
}
|
||||
|
||||
extern bool bcma_core_is_enabled(struct bcma_device *core);
|
||||
extern void bcma_core_disable(struct bcma_device *core, u32 flags);
|
||||
|
|
|
|||
|
|
@ -203,6 +203,7 @@
|
|||
#define BCMA_CC_PMU_CTL 0x0600 /* PMU control */
|
||||
#define BCMA_CC_PMU_CTL_ILP_DIV 0xFFFF0000 /* ILP div mask */
|
||||
#define BCMA_CC_PMU_CTL_ILP_DIV_SHIFT 16
|
||||
#define BCMA_CC_PMU_CTL_PLL_UPD 0x00000400
|
||||
#define BCMA_CC_PMU_CTL_NOILPONW 0x00000200 /* No ILP on wait */
|
||||
#define BCMA_CC_PMU_CTL_HTREQEN 0x00000100 /* HT req enable */
|
||||
#define BCMA_CC_PMU_CTL_ALPREQEN 0x00000080 /* ALP req enable */
|
||||
|
|
|
|||
33
include/linux/can/platform/cc770.h
Normal file
33
include/linux/can/platform/cc770.h
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
#ifndef _CAN_PLATFORM_CC770_H_
|
||||
#define _CAN_PLATFORM_CC770_H_
|
||||
|
||||
/* CPU Interface Register (0x02) */
|
||||
#define CPUIF_CEN 0x01 /* Clock Out Enable */
|
||||
#define CPUIF_MUX 0x04 /* Multiplex */
|
||||
#define CPUIF_SLP 0x08 /* Sleep */
|
||||
#define CPUIF_PWD 0x10 /* Power Down Mode */
|
||||
#define CPUIF_DMC 0x20 /* Divide Memory Clock */
|
||||
#define CPUIF_DSC 0x40 /* Divide System Clock */
|
||||
#define CPUIF_RST 0x80 /* Hardware Reset Status */
|
||||
|
||||
/* Clock Out Register (0x1f) */
|
||||
#define CLKOUT_CD_MASK 0x0f /* Clock Divider mask */
|
||||
#define CLKOUT_SL_MASK 0x30 /* Slew Rate mask */
|
||||
#define CLKOUT_SL_SHIFT 4
|
||||
|
||||
/* Bus Configuration Register (0x2f) */
|
||||
#define BUSCFG_DR0 0x01 /* Disconnect RX0 Input / Select RX input */
|
||||
#define BUSCFG_DR1 0x02 /* Disconnect RX1 Input / Silent mode */
|
||||
#define BUSCFG_DT1 0x08 /* Disconnect TX1 Output */
|
||||
#define BUSCFG_POL 0x20 /* Polarity dominant or recessive */
|
||||
#define BUSCFG_CBY 0x40 /* Input Comparator Bypass */
|
||||
|
||||
struct cc770_platform_data {
|
||||
u32 osc_freq; /* CAN bus oscillator frequency in Hz */
|
||||
|
||||
u8 cir; /* CPU Interface Register */
|
||||
u8 cor; /* Clock Out Register */
|
||||
u8 bcr; /* Bus Configuration Register */
|
||||
};
|
||||
|
||||
#endif /* !_CAN_PLATFORM_CC770_H_ */
|
||||
|
|
@ -59,8 +59,16 @@ SUBSYS(net_cls)
|
|||
SUBSYS(blkio)
|
||||
#endif
|
||||
|
||||
/* */
|
||||
|
||||
#ifdef CONFIG_CGROUP_PERF
|
||||
SUBSYS(perf)
|
||||
#endif
|
||||
|
||||
/* */
|
||||
|
||||
#ifdef CONFIG_NETPRIO_CGROUP
|
||||
SUBSYS(net_prio)
|
||||
#endif
|
||||
|
||||
/* */
|
||||
|
|
|
|||
97
include/linux/dynamic_queue_limits.h
Normal file
97
include/linux/dynamic_queue_limits.h
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
/*
|
||||
* Dynamic queue limits (dql) - Definitions
|
||||
*
|
||||
* Copyright (c) 2011, Tom Herbert <therbert@google.com>
|
||||
*
|
||||
* This header file contains the definitions for dynamic queue limits (dql).
|
||||
* dql would be used in conjunction with a producer/consumer type queue
|
||||
* (possibly a HW queue). Such a queue would have these general properties:
|
||||
*
|
||||
* 1) Objects are queued up to some limit specified as number of objects.
|
||||
* 2) Periodically a completion process executes which retires consumed
|
||||
* objects.
|
||||
* 3) Starvation occurs when limit has been reached, all queued data has
|
||||
* actually been consumed, but completion processing has not yet run
|
||||
* so queuing new data is blocked.
|
||||
* 4) Minimizing the amount of queued data is desirable.
|
||||
*
|
||||
* The goal of dql is to calculate the limit as the minimum number of objects
|
||||
* needed to prevent starvation.
|
||||
*
|
||||
* The primary functions of dql are:
|
||||
* dql_queued - called when objects are enqueued to record number of objects
|
||||
* dql_avail - returns how many objects are available to be queued based
|
||||
* on the object limit and how many objects are already enqueued
|
||||
* dql_completed - called at completion time to indicate how many objects
|
||||
* were retired from the queue
|
||||
*
|
||||
* The dql implementation does not implement any locking for the dql data
|
||||
* structures, the higher layer should provide this. dql_queued should
|
||||
* be serialized to prevent concurrent execution of the function; this
|
||||
* is also true for dql_completed. However, dql_queued and dlq_completed can
|
||||
* be executed concurrently (i.e. they can be protected by different locks).
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_DQL_H
|
||||
#define _LINUX_DQL_H
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
struct dql {
|
||||
/* Fields accessed in enqueue path (dql_queued) */
|
||||
unsigned int num_queued; /* Total ever queued */
|
||||
unsigned int adj_limit; /* limit + num_completed */
|
||||
unsigned int last_obj_cnt; /* Count at last queuing */
|
||||
|
||||
/* Fields accessed only by completion path (dql_completed) */
|
||||
|
||||
unsigned int limit ____cacheline_aligned_in_smp; /* Current limit */
|
||||
unsigned int num_completed; /* Total ever completed */
|
||||
|
||||
unsigned int prev_ovlimit; /* Previous over limit */
|
||||
unsigned int prev_num_queued; /* Previous queue total */
|
||||
unsigned int prev_last_obj_cnt; /* Previous queuing cnt */
|
||||
|
||||
unsigned int lowest_slack; /* Lowest slack found */
|
||||
unsigned long slack_start_time; /* Time slacks seen */
|
||||
|
||||
/* Configuration */
|
||||
unsigned int max_limit; /* Max limit */
|
||||
unsigned int min_limit; /* Minimum limit */
|
||||
unsigned int slack_hold_time; /* Time to measure slack */
|
||||
};
|
||||
|
||||
/* Set some static maximums */
|
||||
#define DQL_MAX_OBJECT (UINT_MAX / 16)
|
||||
#define DQL_MAX_LIMIT ((UINT_MAX / 2) - DQL_MAX_OBJECT)
|
||||
|
||||
/*
|
||||
* Record number of objects queued. Assumes that caller has already checked
|
||||
* availability in the queue with dql_avail.
|
||||
*/
|
||||
static inline void dql_queued(struct dql *dql, unsigned int count)
|
||||
{
|
||||
BUG_ON(count > DQL_MAX_OBJECT);
|
||||
|
||||
dql->num_queued += count;
|
||||
dql->last_obj_cnt = count;
|
||||
}
|
||||
|
||||
/* Returns how many objects can be queued, < 0 indicates over limit. */
|
||||
static inline int dql_avail(const struct dql *dql)
|
||||
{
|
||||
return dql->adj_limit - dql->num_queued;
|
||||
}
|
||||
|
||||
/* Record number of completed objects and recalculate the limit. */
|
||||
void dql_completed(struct dql *dql, unsigned int count);
|
||||
|
||||
/* Reset dql state */
|
||||
void dql_reset(struct dql *dql);
|
||||
|
||||
/* Initialize dql state */
|
||||
int dql_init(struct dql *dql, unsigned hold_time);
|
||||
|
||||
#endif /* _KERNEL_ */
|
||||
|
||||
#endif /* _LINUX_DQL_H */
|
||||
|
|
@ -33,6 +33,7 @@
|
|||
#define PCI_EEPROM_WIDTH_93C86 8
|
||||
#define PCI_EEPROM_WIDTH_OPCODE 3
|
||||
#define PCI_EEPROM_WRITE_OPCODE 0x05
|
||||
#define PCI_EEPROM_ERASE_OPCODE 0x07
|
||||
#define PCI_EEPROM_READ_OPCODE 0x06
|
||||
#define PCI_EEPROM_EWDS_OPCODE 0x10
|
||||
#define PCI_EEPROM_EWEN_OPCODE 0x13
|
||||
|
|
@ -46,6 +47,7 @@
|
|||
* @register_write(struct eeprom_93cx6 *eeprom): handler to
|
||||
* write to the eeprom register by using all reg_* fields.
|
||||
* @width: eeprom width, should be one of the PCI_EEPROM_WIDTH_* defines
|
||||
* @drive_data: Set if we're driving the data line.
|
||||
* @reg_data_in: register field to indicate data input
|
||||
* @reg_data_out: register field to indicate data output
|
||||
* @reg_data_clock: register field to set the data clock
|
||||
|
|
@ -62,6 +64,7 @@ struct eeprom_93cx6 {
|
|||
|
||||
int width;
|
||||
|
||||
char drive_data;
|
||||
char reg_data_in;
|
||||
char reg_data_out;
|
||||
char reg_data_clock;
|
||||
|
|
@ -72,3 +75,8 @@ extern void eeprom_93cx6_read(struct eeprom_93cx6 *eeprom,
|
|||
const u8 word, u16 *data);
|
||||
extern void eeprom_93cx6_multiread(struct eeprom_93cx6 *eeprom,
|
||||
const u8 word, __le16 *data, const u16 words);
|
||||
|
||||
extern void eeprom_93cx6_wren(struct eeprom_93cx6 *eeprom, bool enable);
|
||||
|
||||
extern void eeprom_93cx6_write(struct eeprom_93cx6 *eeprom,
|
||||
u8 addr, u16 data);
|
||||
|
|
|
|||
|
|
@ -17,14 +17,15 @@ struct sock_extended_err {
|
|||
#define SO_EE_ORIGIN_LOCAL 1
|
||||
#define SO_EE_ORIGIN_ICMP 2
|
||||
#define SO_EE_ORIGIN_ICMP6 3
|
||||
#define SO_EE_ORIGIN_TIMESTAMPING 4
|
||||
#define SO_EE_ORIGIN_TXSTATUS 4
|
||||
#define SO_EE_ORIGIN_TIMESTAMPING SO_EE_ORIGIN_TXSTATUS
|
||||
|
||||
#define SO_EE_OFFENDER(ee) ((struct sockaddr*)((ee)+1))
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <net/ip.h>
|
||||
#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
#include <linux/ipv6.h>
|
||||
#endif
|
||||
|
||||
|
|
@ -33,7 +34,7 @@ struct sock_extended_err {
|
|||
struct sock_exterr_skb {
|
||||
union {
|
||||
struct inet_skb_parm h4;
|
||||
#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
struct inet6_skb_parm h6;
|
||||
#endif
|
||||
} header;
|
||||
|
|
|
|||
|
|
@ -489,7 +489,10 @@ struct ethtool_rx_flow_spec {
|
|||
* on return.
|
||||
*
|
||||
* For %ETHTOOL_GRXCLSRLCNT, @rule_cnt is set to the number of defined
|
||||
* rules on return.
|
||||
* rules on return. If @data is non-zero on return then it is the
|
||||
* size of the rule table, plus the flag %RX_CLS_LOC_SPECIAL if the
|
||||
* driver supports any special location values. If that flag is not
|
||||
* set in @data then special location values should not be used.
|
||||
*
|
||||
* For %ETHTOOL_GRXCLSRULE, @fs.@location specifies the location of an
|
||||
* existing rule on entry and @fs contains the rule on return.
|
||||
|
|
@ -501,10 +504,23 @@ struct ethtool_rx_flow_spec {
|
|||
* must use the second parameter to get_rxnfc() instead of @rule_locs.
|
||||
*
|
||||
* For %ETHTOOL_SRXCLSRLINS, @fs specifies the rule to add or update.
|
||||
* @fs.@location specifies the location to use and must not be ignored.
|
||||
* @fs.@location either specifies the location to use or is a special
|
||||
* location value with %RX_CLS_LOC_SPECIAL flag set. On return,
|
||||
* @fs.@location is the actual rule location.
|
||||
*
|
||||
* For %ETHTOOL_SRXCLSRLDEL, @fs.@location specifies the location of an
|
||||
* existing rule on entry.
|
||||
*
|
||||
* A driver supporting the special location values for
|
||||
* %ETHTOOL_SRXCLSRLINS may add the rule at any suitable unused
|
||||
* location, and may remove a rule at a later location (lower
|
||||
* priority) that matches exactly the same set of flows. The special
|
||||
* values are: %RX_CLS_LOC_ANY, selecting any location;
|
||||
* %RX_CLS_LOC_FIRST, selecting the first suitable location (maximum
|
||||
* priority); and %RX_CLS_LOC_LAST, selecting the last suitable
|
||||
* location (minimum priority). Additional special values may be
|
||||
* defined in future and drivers must return -%EINVAL for any
|
||||
* unrecognised value.
|
||||
*/
|
||||
struct ethtool_rxnfc {
|
||||
__u32 cmd;
|
||||
|
|
@ -543,9 +559,15 @@ struct compat_ethtool_rxnfc {
|
|||
/**
|
||||
* struct ethtool_rxfh_indir - command to get or set RX flow hash indirection
|
||||
* @cmd: Specific command number - %ETHTOOL_GRXFHINDIR or %ETHTOOL_SRXFHINDIR
|
||||
* @size: On entry, the array size of the user buffer. On return from
|
||||
* %ETHTOOL_GRXFHINDIR, the array size of the hardware indirection table.
|
||||
* @size: On entry, the array size of the user buffer, which may be zero.
|
||||
* On return from %ETHTOOL_GRXFHINDIR, the array size of the hardware
|
||||
* indirection table.
|
||||
* @ring_index: RX ring/queue index for each hash value
|
||||
*
|
||||
* For %ETHTOOL_GRXFHINDIR, a @size of zero means that only the size
|
||||
* should be returned. For %ETHTOOL_SRXFHINDIR, a @size of zero means
|
||||
* the table should be reset to default values. This last feature
|
||||
* is not supported by the original implementations.
|
||||
*/
|
||||
struct ethtool_rxfh_indir {
|
||||
__u32 cmd;
|
||||
|
|
@ -724,9 +746,6 @@ enum ethtool_sfeatures_retval_bits {
|
|||
|
||||
#include <linux/rculist.h>
|
||||
|
||||
/* needed by dev_disable_lro() */
|
||||
extern int __ethtool_set_flags(struct net_device *dev, u32 flags);
|
||||
|
||||
extern int __ethtool_get_settings(struct net_device *dev,
|
||||
struct ethtool_cmd *cmd);
|
||||
|
||||
|
|
@ -750,19 +769,18 @@ 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_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);
|
||||
int ethtool_op_set_tx_ipv6_csum(struct net_device *dev, u32 data);
|
||||
u32 ethtool_op_get_sg(struct net_device *dev);
|
||||
int ethtool_op_set_sg(struct net_device *dev, u32 data);
|
||||
u32 ethtool_op_get_tso(struct net_device *dev);
|
||||
int ethtool_op_set_tso(struct net_device *dev, u32 data);
|
||||
u32 ethtool_op_get_ufo(struct net_device *dev);
|
||||
int ethtool_op_set_ufo(struct net_device *dev, u32 data);
|
||||
u32 ethtool_op_get_flags(struct net_device *dev);
|
||||
int ethtool_op_set_flags(struct net_device *dev, u32 data, u32 supported);
|
||||
bool ethtool_invalid_flags(struct net_device *dev, u32 data, u32 supported);
|
||||
|
||||
/**
|
||||
* ethtool_rxfh_indir_default - get default value for RX flow hash indirection
|
||||
* @index: Index in RX flow hash indirection table
|
||||
* @n_rx_rings: Number of RX rings to use
|
||||
*
|
||||
* This function provides the default policy for RX flow hash indirection.
|
||||
*/
|
||||
static inline u32 ethtool_rxfh_indir_default(u32 index, u32 n_rx_rings)
|
||||
{
|
||||
return index % n_rx_rings;
|
||||
}
|
||||
|
||||
/**
|
||||
* struct ethtool_ops - optional netdev operations
|
||||
|
|
@ -807,22 +825,6 @@ bool ethtool_invalid_flags(struct net_device *dev, u32 data, u32 supported);
|
|||
* @get_pauseparam: Report pause parameters
|
||||
* @set_pauseparam: Set pause parameters. Returns a negative error code
|
||||
* or zero.
|
||||
* @get_rx_csum: Deprecated in favour of the netdev feature %NETIF_F_RXCSUM.
|
||||
* Report whether receive checksums are turned on or off.
|
||||
* @set_rx_csum: Deprecated in favour of generic netdev features. Turn
|
||||
* receive checksum on or off. Returns a negative error code or zero.
|
||||
* @get_tx_csum: Deprecated as redundant. Report whether transmit checksums
|
||||
* are turned on or off.
|
||||
* @set_tx_csum: Deprecated in favour of generic netdev features. Turn
|
||||
* transmit checksums on or off. Returns a negative error code or zero.
|
||||
* @get_sg: Deprecated as redundant. Report whether scatter-gather is
|
||||
* enabled.
|
||||
* @set_sg: Deprecated in favour of generic netdev features. Turn
|
||||
* scatter-gather on or off. Returns a negative error code or zero.
|
||||
* @get_tso: Deprecated as redundant. Report whether TCP segmentation
|
||||
* offload is enabled.
|
||||
* @set_tso: Deprecated in favour of generic netdev features. Turn TCP
|
||||
* segmentation offload on or off. Returns a negative error code or zero.
|
||||
* @self_test: Run specified self-tests
|
||||
* @get_strings: Return a set of strings that describe the requested objects
|
||||
* @set_phys_id: Identify the physical devices, e.g. by flashing an LED
|
||||
|
|
@ -844,15 +846,6 @@ bool ethtool_invalid_flags(struct net_device *dev, u32 data, u32 supported);
|
|||
* negative error code or zero.
|
||||
* @complete: Function to be called after any other operation except
|
||||
* @begin. Will be called even if the other operation failed.
|
||||
* @get_ufo: Deprecated as redundant. Report whether UDP fragmentation
|
||||
* offload is enabled.
|
||||
* @set_ufo: Deprecated in favour of generic netdev features. Turn UDP
|
||||
* fragmentation offload on or off. Returns a negative error code or zero.
|
||||
* @get_flags: Deprecated as redundant. Report features included in
|
||||
* &enum ethtool_flags that are enabled.
|
||||
* @set_flags: Deprecated in favour of generic netdev features. Turn
|
||||
* features included in &enum ethtool_flags on or off. Returns a
|
||||
* negative error code or zero.
|
||||
* @get_priv_flags: Report driver-specific feature flags.
|
||||
* @set_priv_flags: Set driver-specific feature flags. Returns a negative
|
||||
* error code or zero.
|
||||
|
|
@ -866,11 +859,13 @@ bool ethtool_invalid_flags(struct net_device *dev, u32 data, u32 supported);
|
|||
* @reset: Reset (part of) the device, as specified by a bitmask of
|
||||
* flags from &enum ethtool_reset_flags. Returns a negative
|
||||
* error code or zero.
|
||||
* @set_rx_ntuple: Set an RX n-tuple rule. Returns a negative error code
|
||||
* or zero.
|
||||
* @get_rxfh_indir_size: Get the size of the RX flow hash indirection table.
|
||||
* Returns zero if not supported for this specific device.
|
||||
* @get_rxfh_indir: Get the contents of the RX flow hash indirection table.
|
||||
* Will not be called if @get_rxfh_indir_size returns zero.
|
||||
* Returns a negative error code or zero.
|
||||
* @set_rxfh_indir: Set the contents of the RX flow hash indirection table.
|
||||
* Will not be called if @get_rxfh_indir_size returns zero.
|
||||
* Returns a negative error code or zero.
|
||||
* @get_channels: Get number of channels.
|
||||
* @set_channels: Set number of channels. Returns a negative error code or
|
||||
|
|
@ -917,14 +912,6 @@ struct ethtool_ops {
|
|||
struct ethtool_pauseparam*);
|
||||
int (*set_pauseparam)(struct net_device *,
|
||||
struct ethtool_pauseparam*);
|
||||
u32 (*get_rx_csum)(struct net_device *);
|
||||
int (*set_rx_csum)(struct net_device *, u32);
|
||||
u32 (*get_tx_csum)(struct net_device *);
|
||||
int (*set_tx_csum)(struct net_device *, u32);
|
||||
u32 (*get_sg)(struct net_device *);
|
||||
int (*set_sg)(struct net_device *, u32);
|
||||
u32 (*get_tso)(struct net_device *);
|
||||
int (*set_tso)(struct net_device *, u32);
|
||||
void (*self_test)(struct net_device *, struct ethtool_test *, u64 *);
|
||||
void (*get_strings)(struct net_device *, u32 stringset, u8 *);
|
||||
int (*set_phys_id)(struct net_device *, enum ethtool_phys_id_state);
|
||||
|
|
@ -932,10 +919,6 @@ struct ethtool_ops {
|
|||
struct ethtool_stats *, u64 *);
|
||||
int (*begin)(struct net_device *);
|
||||
void (*complete)(struct net_device *);
|
||||
u32 (*get_ufo)(struct net_device *);
|
||||
int (*set_ufo)(struct net_device *, u32);
|
||||
u32 (*get_flags)(struct net_device *);
|
||||
int (*set_flags)(struct net_device *, u32);
|
||||
u32 (*get_priv_flags)(struct net_device *);
|
||||
int (*set_priv_flags)(struct net_device *, u32);
|
||||
int (*get_sset_count)(struct net_device *, int);
|
||||
|
|
@ -944,12 +927,9 @@ struct ethtool_ops {
|
|||
int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *);
|
||||
int (*flash_device)(struct net_device *, struct ethtool_flash *);
|
||||
int (*reset)(struct net_device *, u32 *);
|
||||
int (*set_rx_ntuple)(struct net_device *,
|
||||
struct ethtool_rx_ntuple *);
|
||||
int (*get_rxfh_indir)(struct net_device *,
|
||||
struct ethtool_rxfh_indir *);
|
||||
int (*set_rxfh_indir)(struct net_device *,
|
||||
const struct ethtool_rxfh_indir *);
|
||||
u32 (*get_rxfh_indir_size)(struct net_device *);
|
||||
int (*get_rxfh_indir)(struct net_device *, u32 *);
|
||||
int (*set_rxfh_indir)(struct net_device *, const u32 *);
|
||||
void (*get_channels)(struct net_device *, struct ethtool_channels *);
|
||||
int (*set_channels)(struct net_device *, struct ethtool_channels *);
|
||||
int (*get_dump_flag)(struct net_device *, struct ethtool_dump *);
|
||||
|
|
@ -1173,6 +1153,12 @@ struct ethtool_ops {
|
|||
|
||||
#define RX_CLS_FLOW_DISC 0xffffffffffffffffULL
|
||||
|
||||
/* Special RX classification rule insert location values */
|
||||
#define RX_CLS_LOC_SPECIAL 0x80000000 /* flag */
|
||||
#define RX_CLS_LOC_ANY 0xffffffff
|
||||
#define RX_CLS_LOC_FIRST 0xfffffffe
|
||||
#define RX_CLS_LOC_LAST 0xfffffffd
|
||||
|
||||
/* Reset flags */
|
||||
/* The reset() operation must clear the flags for the components which
|
||||
* were actually reset. On successful return, the flags indicate the
|
||||
|
|
|
|||
|
|
@ -85,6 +85,30 @@ enum {
|
|||
/* All generic netlink requests are serialized by a global lock. */
|
||||
extern void genl_lock(void);
|
||||
extern void genl_unlock(void);
|
||||
#ifdef CONFIG_PROVE_LOCKING
|
||||
extern int lockdep_genl_is_held(void);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* rcu_dereference_genl - rcu_dereference with debug checking
|
||||
* @p: The pointer to read, prior to dereferencing
|
||||
*
|
||||
* Do an rcu_dereference(p), but check caller either holds rcu_read_lock()
|
||||
* or genl mutex. Note : Please prefer genl_dereference() or rcu_dereference()
|
||||
*/
|
||||
#define rcu_dereference_genl(p) \
|
||||
rcu_dereference_check(p, lockdep_genl_is_held())
|
||||
|
||||
/**
|
||||
* genl_dereference - fetch RCU pointer when updates are prevented by genl mutex
|
||||
* @p: The pointer to read, prior to dereferencing
|
||||
*
|
||||
* Return the value of the specified RCU-protected pointer, but omit
|
||||
* both the smp_read_barrier_depends() and the ACCESS_ONCE(), because
|
||||
* caller holds genl mutex.
|
||||
*/
|
||||
#define genl_dereference(p) \
|
||||
rcu_dereference_protected(p, lockdep_genl_is_held())
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
|
|
|
|||
|
|
@ -128,6 +128,7 @@
|
|||
#define IEEE80211_QOS_CTL_ACK_POLICY_NOACK 0x0020
|
||||
#define IEEE80211_QOS_CTL_ACK_POLICY_NO_EXPL 0x0040
|
||||
#define IEEE80211_QOS_CTL_ACK_POLICY_BLOCKACK 0x0060
|
||||
#define IEEE80211_QOS_CTL_ACK_POLICY_MASK 0x0060
|
||||
/* A-MSDU 802.11n */
|
||||
#define IEEE80211_QOS_CTL_A_MSDU_PRESENT 0x0080
|
||||
/* Mesh Control 802.11s */
|
||||
|
|
@ -543,6 +544,15 @@ static inline int ieee80211_is_qos_nullfunc(__le16 fc)
|
|||
cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_QOS_NULLFUNC);
|
||||
}
|
||||
|
||||
/**
|
||||
* ieee80211_is_first_frag - check if IEEE80211_SCTL_FRAG is not set
|
||||
* @seq_ctrl: frame sequence control bytes in little-endian byteorder
|
||||
*/
|
||||
static inline int ieee80211_is_first_frag(__le16 seq_ctrl)
|
||||
{
|
||||
return (seq_ctrl & cpu_to_le16(IEEE80211_SCTL_FRAG)) == 0;
|
||||
}
|
||||
|
||||
struct ieee80211s_hdr {
|
||||
u8 flags;
|
||||
u8 ttl;
|
||||
|
|
@ -770,6 +780,9 @@ struct ieee80211_mgmt {
|
|||
} u;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
/* Supported Rates value encodings in 802.11n-2009 7.3.2.2 */
|
||||
#define BSS_MEMBERSHIP_SELECTOR_HT_PHY 127
|
||||
|
||||
/* mgmt header + 1 byte category code */
|
||||
#define IEEE80211_MIN_ACTION_SIZE offsetof(struct ieee80211_mgmt, u.action.u)
|
||||
|
||||
|
|
@ -1552,6 +1565,8 @@ enum ieee80211_sa_query_action {
|
|||
#define WLAN_CIPHER_SUITE_WEP104 0x000FAC05
|
||||
#define WLAN_CIPHER_SUITE_AES_CMAC 0x000FAC06
|
||||
|
||||
#define WLAN_CIPHER_SUITE_SMS4 0x00147201
|
||||
|
||||
/* AKM suite selectors */
|
||||
#define WLAN_AKM_SUITE_8021X 0x000FAC01
|
||||
#define WLAN_AKM_SUITE_PSK 0x000FAC02
|
||||
|
|
@ -1688,6 +1703,23 @@ static inline bool ieee80211_is_robust_mgmt_frame(struct ieee80211_hdr *hdr)
|
|||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* ieee80211_is_public_action - check if frame is a public action frame
|
||||
* @hdr: the frame
|
||||
* @len: length of the frame
|
||||
*/
|
||||
static inline bool ieee80211_is_public_action(struct ieee80211_hdr *hdr,
|
||||
size_t len)
|
||||
{
|
||||
struct ieee80211_mgmt *mgmt = (void *)hdr;
|
||||
|
||||
if (len < IEEE80211_MIN_ACTION_SIZE)
|
||||
return false;
|
||||
if (!ieee80211_is_action(hdr->frame_control))
|
||||
return false;
|
||||
return mgmt->u.action.category == WLAN_CATEGORY_PUBLIC;
|
||||
}
|
||||
|
||||
/**
|
||||
* ieee80211_fhss_chan_to_freq - get channel frequency
|
||||
* @channel: the FHSS channel
|
||||
|
|
|
|||
|
|
@ -79,6 +79,7 @@
|
|||
#define IFF_TX_SKB_SHARING 0x10000 /* The interface supports sharing
|
||||
* skbs on transmit */
|
||||
#define IFF_UNICAST_FLT 0x20000 /* Supports unicast filtering */
|
||||
#define IFF_TEAM_PORT 0x40000 /* device used as team port */
|
||||
|
||||
#define IF_GET_IFACE 0x0001 /* for querying only */
|
||||
#define IF_GET_PROTO 0x0002
|
||||
|
|
|
|||
|
|
@ -79,6 +79,7 @@
|
|||
#define ETH_P_PAE 0x888E /* Port Access Entity (IEEE 802.1X) */
|
||||
#define ETH_P_AOE 0x88A2 /* ATA over Ethernet */
|
||||
#define ETH_P_8021AD 0x88A8 /* 802.1ad Service VLAN */
|
||||
#define ETH_P_802_EX1 0x88B5 /* 802.1 Local Experimental 1. */
|
||||
#define ETH_P_TIPC 0x88CA /* TIPC */
|
||||
#define ETH_P_8021AH 0x88E7 /* 802.1ah Backbone Service Tag */
|
||||
#define ETH_P_1588 0x88F7 /* IEEE 1588 Timesync */
|
||||
|
|
|
|||
242
include/linux/if_team.h
Normal file
242
include/linux/if_team.h
Normal file
|
|
@ -0,0 +1,242 @@
|
|||
/*
|
||||
* include/linux/if_team.h - Network team device driver header
|
||||
* Copyright (c) 2011 Jiri Pirko <jpirko@redhat.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_IF_TEAM_H_
|
||||
#define _LINUX_IF_TEAM_H_
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
struct team_pcpu_stats {
|
||||
u64 rx_packets;
|
||||
u64 rx_bytes;
|
||||
u64 rx_multicast;
|
||||
u64 tx_packets;
|
||||
u64 tx_bytes;
|
||||
struct u64_stats_sync syncp;
|
||||
u32 rx_dropped;
|
||||
u32 tx_dropped;
|
||||
};
|
||||
|
||||
struct team;
|
||||
|
||||
struct team_port {
|
||||
struct net_device *dev;
|
||||
struct hlist_node hlist; /* node in hash list */
|
||||
struct list_head list; /* node in ordinary list */
|
||||
struct team *team;
|
||||
int index;
|
||||
|
||||
/*
|
||||
* A place for storing original values of the device before it
|
||||
* become a port.
|
||||
*/
|
||||
struct {
|
||||
unsigned char dev_addr[MAX_ADDR_LEN];
|
||||
unsigned int mtu;
|
||||
} orig;
|
||||
|
||||
bool linkup;
|
||||
u32 speed;
|
||||
u8 duplex;
|
||||
|
||||
struct rcu_head rcu;
|
||||
};
|
||||
|
||||
struct team_mode_ops {
|
||||
int (*init)(struct team *team);
|
||||
void (*exit)(struct team *team);
|
||||
rx_handler_result_t (*receive)(struct team *team,
|
||||
struct team_port *port,
|
||||
struct sk_buff *skb);
|
||||
bool (*transmit)(struct team *team, struct sk_buff *skb);
|
||||
int (*port_enter)(struct team *team, struct team_port *port);
|
||||
void (*port_leave)(struct team *team, struct team_port *port);
|
||||
void (*port_change_mac)(struct team *team, struct team_port *port);
|
||||
};
|
||||
|
||||
enum team_option_type {
|
||||
TEAM_OPTION_TYPE_U32,
|
||||
TEAM_OPTION_TYPE_STRING,
|
||||
};
|
||||
|
||||
struct team_option {
|
||||
struct list_head list;
|
||||
const char *name;
|
||||
enum team_option_type type;
|
||||
int (*getter)(struct team *team, void *arg);
|
||||
int (*setter)(struct team *team, void *arg);
|
||||
};
|
||||
|
||||
struct team_mode {
|
||||
struct list_head list;
|
||||
const char *kind;
|
||||
struct module *owner;
|
||||
size_t priv_size;
|
||||
const struct team_mode_ops *ops;
|
||||
};
|
||||
|
||||
#define TEAM_PORT_HASHBITS 4
|
||||
#define TEAM_PORT_HASHENTRIES (1 << TEAM_PORT_HASHBITS)
|
||||
|
||||
#define TEAM_MODE_PRIV_LONGS 4
|
||||
#define TEAM_MODE_PRIV_SIZE (sizeof(long) * TEAM_MODE_PRIV_LONGS)
|
||||
|
||||
struct team {
|
||||
struct net_device *dev; /* associated netdevice */
|
||||
struct team_pcpu_stats __percpu *pcpu_stats;
|
||||
|
||||
struct mutex lock; /* used for overall locking, e.g. port lists write */
|
||||
|
||||
/*
|
||||
* port lists with port count
|
||||
*/
|
||||
int port_count;
|
||||
struct hlist_head port_hlist[TEAM_PORT_HASHENTRIES];
|
||||
struct list_head port_list;
|
||||
|
||||
struct list_head option_list;
|
||||
|
||||
const struct team_mode *mode;
|
||||
struct team_mode_ops ops;
|
||||
long mode_priv[TEAM_MODE_PRIV_LONGS];
|
||||
};
|
||||
|
||||
static inline struct hlist_head *team_port_index_hash(struct team *team,
|
||||
int port_index)
|
||||
{
|
||||
return &team->port_hlist[port_index & (TEAM_PORT_HASHENTRIES - 1)];
|
||||
}
|
||||
|
||||
static inline struct team_port *team_get_port_by_index(struct team *team,
|
||||
int port_index)
|
||||
{
|
||||
struct hlist_node *p;
|
||||
struct team_port *port;
|
||||
struct hlist_head *head = team_port_index_hash(team, port_index);
|
||||
|
||||
hlist_for_each_entry(port, p, head, hlist)
|
||||
if (port->index == port_index)
|
||||
return port;
|
||||
return NULL;
|
||||
}
|
||||
static inline struct team_port *team_get_port_by_index_rcu(struct team *team,
|
||||
int port_index)
|
||||
{
|
||||
struct hlist_node *p;
|
||||
struct team_port *port;
|
||||
struct hlist_head *head = team_port_index_hash(team, port_index);
|
||||
|
||||
hlist_for_each_entry_rcu(port, p, head, hlist)
|
||||
if (port->index == port_index)
|
||||
return port;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
extern int team_port_set_team_mac(struct team_port *port);
|
||||
extern int team_options_register(struct team *team,
|
||||
const struct team_option *option,
|
||||
size_t option_count);
|
||||
extern void team_options_unregister(struct team *team,
|
||||
const struct team_option *option,
|
||||
size_t option_count);
|
||||
extern int team_mode_register(struct team_mode *mode);
|
||||
extern int team_mode_unregister(struct team_mode *mode);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#define TEAM_STRING_MAX_LEN 32
|
||||
|
||||
/**********************************
|
||||
* NETLINK_GENERIC netlink family.
|
||||
**********************************/
|
||||
|
||||
enum {
|
||||
TEAM_CMD_NOOP,
|
||||
TEAM_CMD_OPTIONS_SET,
|
||||
TEAM_CMD_OPTIONS_GET,
|
||||
TEAM_CMD_PORT_LIST_GET,
|
||||
|
||||
__TEAM_CMD_MAX,
|
||||
TEAM_CMD_MAX = (__TEAM_CMD_MAX - 1),
|
||||
};
|
||||
|
||||
enum {
|
||||
TEAM_ATTR_UNSPEC,
|
||||
TEAM_ATTR_TEAM_IFINDEX, /* u32 */
|
||||
TEAM_ATTR_LIST_OPTION, /* nest */
|
||||
TEAM_ATTR_LIST_PORT, /* nest */
|
||||
|
||||
__TEAM_ATTR_MAX,
|
||||
TEAM_ATTR_MAX = __TEAM_ATTR_MAX - 1,
|
||||
};
|
||||
|
||||
/* Nested layout of get/set msg:
|
||||
*
|
||||
* [TEAM_ATTR_LIST_OPTION]
|
||||
* [TEAM_ATTR_ITEM_OPTION]
|
||||
* [TEAM_ATTR_OPTION_*], ...
|
||||
* [TEAM_ATTR_ITEM_OPTION]
|
||||
* [TEAM_ATTR_OPTION_*], ...
|
||||
* ...
|
||||
* [TEAM_ATTR_LIST_PORT]
|
||||
* [TEAM_ATTR_ITEM_PORT]
|
||||
* [TEAM_ATTR_PORT_*], ...
|
||||
* [TEAM_ATTR_ITEM_PORT]
|
||||
* [TEAM_ATTR_PORT_*], ...
|
||||
* ...
|
||||
*/
|
||||
|
||||
enum {
|
||||
TEAM_ATTR_ITEM_OPTION_UNSPEC,
|
||||
TEAM_ATTR_ITEM_OPTION, /* nest */
|
||||
|
||||
__TEAM_ATTR_ITEM_OPTION_MAX,
|
||||
TEAM_ATTR_ITEM_OPTION_MAX = __TEAM_ATTR_ITEM_OPTION_MAX - 1,
|
||||
};
|
||||
|
||||
enum {
|
||||
TEAM_ATTR_OPTION_UNSPEC,
|
||||
TEAM_ATTR_OPTION_NAME, /* string */
|
||||
TEAM_ATTR_OPTION_CHANGED, /* flag */
|
||||
TEAM_ATTR_OPTION_TYPE, /* u8 */
|
||||
TEAM_ATTR_OPTION_DATA, /* dynamic */
|
||||
|
||||
__TEAM_ATTR_OPTION_MAX,
|
||||
TEAM_ATTR_OPTION_MAX = __TEAM_ATTR_OPTION_MAX - 1,
|
||||
};
|
||||
|
||||
enum {
|
||||
TEAM_ATTR_ITEM_PORT_UNSPEC,
|
||||
TEAM_ATTR_ITEM_PORT, /* nest */
|
||||
|
||||
__TEAM_ATTR_ITEM_PORT_MAX,
|
||||
TEAM_ATTR_ITEM_PORT_MAX = __TEAM_ATTR_ITEM_PORT_MAX - 1,
|
||||
};
|
||||
|
||||
enum {
|
||||
TEAM_ATTR_PORT_UNSPEC,
|
||||
TEAM_ATTR_PORT_IFINDEX, /* u32 */
|
||||
TEAM_ATTR_PORT_CHANGED, /* flag */
|
||||
TEAM_ATTR_PORT_LINKUP, /* flag */
|
||||
TEAM_ATTR_PORT_SPEED, /* u32 */
|
||||
TEAM_ATTR_PORT_DUPLEX, /* u8 */
|
||||
|
||||
__TEAM_ATTR_PORT_MAX,
|
||||
TEAM_ATTR_PORT_MAX = __TEAM_ATTR_PORT_MAX - 1,
|
||||
};
|
||||
|
||||
/*
|
||||
* NETLINK_GENERIC related info
|
||||
*/
|
||||
#define TEAM_GENL_NAME "team"
|
||||
#define TEAM_GENL_VERSION 0x1
|
||||
#define TEAM_GENL_CHANGE_EVENT_MC_GRP_NAME "change_event"
|
||||
|
||||
#endif /* _LINUX_IF_TEAM_H_ */
|
||||
|
|
@ -74,22 +74,7 @@ static inline struct vlan_ethhdr *vlan_eth_hdr(const struct sk_buff *skb)
|
|||
/* found in socket.c */
|
||||
extern void vlan_ioctl_set(int (*hook)(struct net *, void __user *));
|
||||
|
||||
/* if this changes, algorithm will have to be reworked because this
|
||||
* depends on completely exhausting the VLAN identifier space. Thus
|
||||
* it gives constant time look-up, but in many cases it wastes memory.
|
||||
*/
|
||||
#define VLAN_GROUP_ARRAY_SPLIT_PARTS 8
|
||||
#define VLAN_GROUP_ARRAY_PART_LEN (VLAN_N_VID/VLAN_GROUP_ARRAY_SPLIT_PARTS)
|
||||
|
||||
struct vlan_group {
|
||||
struct net_device *real_dev; /* The ethernet(like) device
|
||||
* the vlan is attached to.
|
||||
*/
|
||||
unsigned int nr_vlans;
|
||||
struct hlist_node hlist; /* linked list */
|
||||
struct net_device **vlan_devices_arrays[VLAN_GROUP_ARRAY_SPLIT_PARTS];
|
||||
struct rcu_head rcu;
|
||||
};
|
||||
struct vlan_info;
|
||||
|
||||
static inline int is_vlan_dev(struct net_device *dev)
|
||||
{
|
||||
|
|
@ -109,6 +94,13 @@ extern u16 vlan_dev_vlan_id(const struct net_device *dev);
|
|||
extern bool vlan_do_receive(struct sk_buff **skb, bool last_handler);
|
||||
extern struct sk_buff *vlan_untag(struct sk_buff *skb);
|
||||
|
||||
extern int vlan_vid_add(struct net_device *dev, unsigned short vid);
|
||||
extern void vlan_vid_del(struct net_device *dev, unsigned short vid);
|
||||
|
||||
extern int vlan_vids_add_by_dev(struct net_device *dev,
|
||||
const struct net_device *by_dev);
|
||||
extern void vlan_vids_del_by_dev(struct net_device *dev,
|
||||
const struct net_device *by_dev);
|
||||
#else
|
||||
static inline struct net_device *
|
||||
__vlan_find_dev_deep(struct net_device *real_dev, u16 vlan_id)
|
||||
|
|
@ -139,6 +131,26 @@ static inline struct sk_buff *vlan_untag(struct sk_buff *skb)
|
|||
{
|
||||
return skb;
|
||||
}
|
||||
|
||||
static inline int vlan_vid_add(struct net_device *dev, unsigned short vid)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void vlan_vid_del(struct net_device *dev, unsigned short vid)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int vlan_vids_add_by_dev(struct net_device *dev,
|
||||
const struct net_device *by_dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void vlan_vids_del_by_dev(struct net_device *dev,
|
||||
const struct net_device *by_dev)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
|
@ -310,6 +322,40 @@ static inline __be16 vlan_get_protocol(const struct sk_buff *skb)
|
|||
|
||||
return protocol;
|
||||
}
|
||||
|
||||
static inline void vlan_set_encap_proto(struct sk_buff *skb,
|
||||
struct vlan_hdr *vhdr)
|
||||
{
|
||||
__be16 proto;
|
||||
unsigned char *rawp;
|
||||
|
||||
/*
|
||||
* Was a VLAN packet, grab the encapsulated protocol, which the layer
|
||||
* three protocols care about.
|
||||
*/
|
||||
|
||||
proto = vhdr->h_vlan_encapsulated_proto;
|
||||
if (ntohs(proto) >= 1536) {
|
||||
skb->protocol = proto;
|
||||
return;
|
||||
}
|
||||
|
||||
rawp = skb->data;
|
||||
if (*(unsigned short *) rawp == 0xFFFF)
|
||||
/*
|
||||
* This is a magic hack to spot IPX packets. Older Novell
|
||||
* breaks the protocol design and runs IPX over 802.3 without
|
||||
* an 802.2 LLC layer. We look for FFFF which isn't a used
|
||||
* 802.2 SSAP/DSAP. This won't work for fault tolerant netware
|
||||
* but does for the rest.
|
||||
*/
|
||||
skb->protocol = htons(ETH_P_802_3);
|
||||
else
|
||||
/*
|
||||
* Real 802.2 LLC
|
||||
*/
|
||||
skb->protocol = htons(ETH_P_802_2);
|
||||
}
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
/* VLAN IOCTLs are found in sockios.h */
|
||||
|
|
@ -352,7 +398,7 @@ struct vlan_ioctl_args {
|
|||
unsigned int skb_priority;
|
||||
unsigned int name_type;
|
||||
unsigned int bind_type;
|
||||
unsigned int flag; /* Matches vlan_dev_info flags */
|
||||
unsigned int flag; /* Matches vlan_dev_priv flags */
|
||||
} u;
|
||||
|
||||
short vlan_qos;
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ struct inet_diag_sockid {
|
|||
|
||||
/* Request structure */
|
||||
|
||||
struct inet_diag_req {
|
||||
struct inet_diag_req_compat {
|
||||
__u8 idiag_family; /* Family of addresses. */
|
||||
__u8 idiag_src_len;
|
||||
__u8 idiag_dst_len;
|
||||
|
|
@ -34,6 +34,15 @@ struct inet_diag_req {
|
|||
__u32 idiag_dbs; /* Tables to dump (NI) */
|
||||
};
|
||||
|
||||
struct inet_diag_req {
|
||||
__u8 sdiag_family;
|
||||
__u8 sdiag_protocol;
|
||||
__u8 idiag_ext;
|
||||
__u8 pad;
|
||||
__u32 idiag_states;
|
||||
struct inet_diag_sockid id;
|
||||
};
|
||||
|
||||
enum {
|
||||
INET_DIAG_REQ_NONE,
|
||||
INET_DIAG_REQ_BYTECODE,
|
||||
|
|
@ -99,9 +108,10 @@ enum {
|
|||
INET_DIAG_CONG,
|
||||
INET_DIAG_TOS,
|
||||
INET_DIAG_TCLASS,
|
||||
INET_DIAG_SKMEMINFO,
|
||||
};
|
||||
|
||||
#define INET_DIAG_MAX INET_DIAG_TCLASS
|
||||
#define INET_DIAG_MAX INET_DIAG_SKMEMINFO
|
||||
|
||||
|
||||
/* INET_DIAG_MEM */
|
||||
|
|
@ -125,16 +135,41 @@ struct tcpvegas_info {
|
|||
#ifdef __KERNEL__
|
||||
struct sock;
|
||||
struct inet_hashinfo;
|
||||
struct nlattr;
|
||||
struct nlmsghdr;
|
||||
struct sk_buff;
|
||||
struct netlink_callback;
|
||||
|
||||
struct inet_diag_handler {
|
||||
struct inet_hashinfo *idiag_hashinfo;
|
||||
void (*dump)(struct sk_buff *skb,
|
||||
struct netlink_callback *cb,
|
||||
struct inet_diag_req *r,
|
||||
struct nlattr *bc);
|
||||
|
||||
int (*dump_one)(struct sk_buff *in_skb,
|
||||
const struct nlmsghdr *nlh,
|
||||
struct inet_diag_req *req);
|
||||
|
||||
void (*idiag_get_info)(struct sock *sk,
|
||||
struct inet_diag_msg *r,
|
||||
void *info);
|
||||
__u16 idiag_info_size;
|
||||
__u16 idiag_type;
|
||||
};
|
||||
|
||||
struct inet_connection_sock;
|
||||
int inet_sk_diag_fill(struct sock *sk, struct inet_connection_sock *icsk,
|
||||
struct sk_buff *skb, struct inet_diag_req *req,
|
||||
u32 pid, u32 seq, u16 nlmsg_flags,
|
||||
const struct nlmsghdr *unlh);
|
||||
void inet_diag_dump_icsk(struct inet_hashinfo *h, struct sk_buff *skb,
|
||||
struct netlink_callback *cb, struct inet_diag_req *r,
|
||||
struct nlattr *bc);
|
||||
int inet_diag_dump_one_icsk(struct inet_hashinfo *hashinfo,
|
||||
struct sk_buff *in_skb, const struct nlmsghdr *nlh,
|
||||
struct inet_diag_req *req);
|
||||
|
||||
int inet_diag_bc_sk(const struct nlattr *_bc, struct sock *sk);
|
||||
|
||||
extern int inet_diag_register(const struct inet_diag_handler *handler);
|
||||
extern void inet_diag_unregister(const struct inet_diag_handler *handler);
|
||||
#endif /* __KERNEL__ */
|
||||
|
|
|
|||
|
|
@ -404,7 +404,7 @@ struct tcp6_sock {
|
|||
|
||||
extern int inet6_sk_rebuild_header(struct sock *sk);
|
||||
|
||||
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
static inline struct ipv6_pinfo * inet6_sk(const struct sock *__sk)
|
||||
{
|
||||
return inet_sk(__sk)->pinet6;
|
||||
|
|
@ -515,7 +515,7 @@ static inline struct raw6_sock *raw6_sk(const struct sock *sk)
|
|||
#define inet6_rcv_saddr(__sk) NULL
|
||||
#define tcp_twsk_ipv6only(__sk) 0
|
||||
#define inet_v6_ipv6only(__sk) 0
|
||||
#endif /* defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) */
|
||||
#endif /* IS_ENABLED(CONFIG_IPV6) */
|
||||
|
||||
#define INET6_MATCH(__sk, __net, __hash, __saddr, __daddr, __ports, __dif)\
|
||||
(((__sk)->sk_hash == (__hash)) && sock_net((__sk)) == (__net) && \
|
||||
|
|
|
|||
|
|
@ -301,7 +301,7 @@ static inline int __nlm_privileged_request4(const struct sockaddr *sap)
|
|||
return ipv4_is_loopback(sin->sin_addr.s_addr);
|
||||
}
|
||||
|
||||
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
static inline int __nlm_privileged_request6(const struct sockaddr *sap)
|
||||
{
|
||||
const struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sap;
|
||||
|
|
@ -314,12 +314,12 @@ static inline int __nlm_privileged_request6(const struct sockaddr *sap)
|
|||
|
||||
return ipv6_addr_type(&sin6->sin6_addr) & IPV6_ADDR_LOOPBACK;
|
||||
}
|
||||
#else /* defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) */
|
||||
#else /* IS_ENABLED(CONFIG_IPV6) */
|
||||
static inline int __nlm_privileged_request6(const struct sockaddr *sap)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif /* defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) */
|
||||
#endif /* IS_ENABLED(CONFIG_IPV6) */
|
||||
|
||||
/*
|
||||
* Ensure incoming requests are from local privileged callers.
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@ struct mdiobb_ops {
|
|||
|
||||
struct mdiobb_ctrl {
|
||||
const struct mdiobb_ops *ops;
|
||||
/* reset callback */
|
||||
int (*reset)(struct mii_bus *bus);
|
||||
};
|
||||
|
||||
/* The returned bus is not yet registered with the phy layer. */
|
||||
|
|
|
|||
|
|
@ -20,6 +20,8 @@ struct mdio_gpio_platform_data {
|
|||
|
||||
unsigned int phy_mask;
|
||||
int irqs[PHY_MAX_ADDR];
|
||||
/* reset callback */
|
||||
int (*reset)(struct mii_bus *bus);
|
||||
};
|
||||
|
||||
#endif /* __LINUX_MDIO_GPIO_H */
|
||||
|
|
|
|||
|
|
@ -85,6 +85,9 @@ extern struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page);
|
|||
extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p);
|
||||
extern struct mem_cgroup *try_get_mem_cgroup_from_mm(struct mm_struct *mm);
|
||||
|
||||
extern struct mem_cgroup *parent_mem_cgroup(struct mem_cgroup *memcg);
|
||||
extern struct mem_cgroup *mem_cgroup_from_cont(struct cgroup *cont);
|
||||
|
||||
static inline
|
||||
int mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *cgroup)
|
||||
{
|
||||
|
|
@ -381,5 +384,25 @@ mem_cgroup_print_bad_page(struct page *page)
|
|||
}
|
||||
#endif
|
||||
|
||||
enum {
|
||||
UNDER_LIMIT,
|
||||
SOFT_LIMIT,
|
||||
OVER_LIMIT,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_INET
|
||||
struct sock;
|
||||
#ifdef CONFIG_CGROUP_MEM_RES_CTLR_KMEM
|
||||
void sock_update_memcg(struct sock *sk);
|
||||
void sock_release_memcg(struct sock *sk);
|
||||
#else
|
||||
static inline void sock_update_memcg(struct sock *sk)
|
||||
{
|
||||
}
|
||||
static inline void sock_release_memcg(struct sock *sk)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_CGROUP_MEM_RES_CTLR_KMEM */
|
||||
#endif /* CONFIG_INET */
|
||||
#endif /* _LINUX_MEMCONTROL_H */
|
||||
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
#define __LINUX_MII_H__
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/ethtool.h>
|
||||
|
||||
/* Generic MII registers. */
|
||||
#define MII_BMCR 0x00 /* Basic mode control register */
|
||||
|
|
@ -239,6 +240,205 @@ static inline unsigned int mii_duplex (unsigned int duplex_lock,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* ethtool_adv_to_mii_adv_t
|
||||
* @ethadv: the ethtool advertisement settings
|
||||
*
|
||||
* A small helper function that translates ethtool advertisement
|
||||
* settings to phy autonegotiation advertisements for the
|
||||
* MII_ADVERTISE register.
|
||||
*/
|
||||
static inline u32 ethtool_adv_to_mii_adv_t(u32 ethadv)
|
||||
{
|
||||
u32 result = 0;
|
||||
|
||||
if (ethadv & ADVERTISED_10baseT_Half)
|
||||
result |= ADVERTISE_10HALF;
|
||||
if (ethadv & ADVERTISED_10baseT_Full)
|
||||
result |= ADVERTISE_10FULL;
|
||||
if (ethadv & ADVERTISED_100baseT_Half)
|
||||
result |= ADVERTISE_100HALF;
|
||||
if (ethadv & ADVERTISED_100baseT_Full)
|
||||
result |= ADVERTISE_100FULL;
|
||||
if (ethadv & ADVERTISED_Pause)
|
||||
result |= ADVERTISE_PAUSE_CAP;
|
||||
if (ethadv & ADVERTISED_Asym_Pause)
|
||||
result |= ADVERTISE_PAUSE_ASYM;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* mii_adv_to_ethtool_adv_t
|
||||
* @adv: value of the MII_ADVERTISE register
|
||||
*
|
||||
* A small helper function that translates MII_ADVERTISE bits
|
||||
* to ethtool advertisement settings.
|
||||
*/
|
||||
static inline u32 mii_adv_to_ethtool_adv_t(u32 adv)
|
||||
{
|
||||
u32 result = 0;
|
||||
|
||||
if (adv & ADVERTISE_10HALF)
|
||||
result |= ADVERTISED_10baseT_Half;
|
||||
if (adv & ADVERTISE_10FULL)
|
||||
result |= ADVERTISED_10baseT_Full;
|
||||
if (adv & ADVERTISE_100HALF)
|
||||
result |= ADVERTISED_100baseT_Half;
|
||||
if (adv & ADVERTISE_100FULL)
|
||||
result |= ADVERTISED_100baseT_Full;
|
||||
if (adv & ADVERTISE_PAUSE_CAP)
|
||||
result |= ADVERTISED_Pause;
|
||||
if (adv & ADVERTISE_PAUSE_ASYM)
|
||||
result |= ADVERTISED_Asym_Pause;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* ethtool_adv_to_mii_ctrl1000_t
|
||||
* @ethadv: the ethtool advertisement settings
|
||||
*
|
||||
* A small helper function that translates ethtool advertisement
|
||||
* settings to phy autonegotiation advertisements for the
|
||||
* MII_CTRL1000 register when in 1000T mode.
|
||||
*/
|
||||
static inline u32 ethtool_adv_to_mii_ctrl1000_t(u32 ethadv)
|
||||
{
|
||||
u32 result = 0;
|
||||
|
||||
if (ethadv & ADVERTISED_1000baseT_Half)
|
||||
result |= ADVERTISE_1000HALF;
|
||||
if (ethadv & ADVERTISED_1000baseT_Full)
|
||||
result |= ADVERTISE_1000FULL;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* mii_ctrl1000_to_ethtool_adv_t
|
||||
* @adv: value of the MII_CTRL1000 register
|
||||
*
|
||||
* A small helper function that translates MII_CTRL1000
|
||||
* bits, when in 1000Base-T mode, to ethtool
|
||||
* advertisement settings.
|
||||
*/
|
||||
static inline u32 mii_ctrl1000_to_ethtool_adv_t(u32 adv)
|
||||
{
|
||||
u32 result = 0;
|
||||
|
||||
if (adv & ADVERTISE_1000HALF)
|
||||
result |= ADVERTISED_1000baseT_Half;
|
||||
if (adv & ADVERTISE_1000FULL)
|
||||
result |= ADVERTISED_1000baseT_Full;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* mii_lpa_to_ethtool_lpa_t
|
||||
* @adv: value of the MII_LPA register
|
||||
*
|
||||
* A small helper function that translates MII_LPA
|
||||
* bits, when in 1000Base-T mode, to ethtool
|
||||
* LP advertisement settings.
|
||||
*/
|
||||
static inline u32 mii_lpa_to_ethtool_lpa_t(u32 lpa)
|
||||
{
|
||||
u32 result = 0;
|
||||
|
||||
if (lpa & LPA_LPACK)
|
||||
result |= ADVERTISED_Autoneg;
|
||||
|
||||
return result | mii_adv_to_ethtool_adv_t(lpa);
|
||||
}
|
||||
|
||||
/**
|
||||
* mii_stat1000_to_ethtool_lpa_t
|
||||
* @adv: value of the MII_STAT1000 register
|
||||
*
|
||||
* A small helper function that translates MII_STAT1000
|
||||
* bits, when in 1000Base-T mode, to ethtool
|
||||
* advertisement settings.
|
||||
*/
|
||||
static inline u32 mii_stat1000_to_ethtool_lpa_t(u32 lpa)
|
||||
{
|
||||
u32 result = 0;
|
||||
|
||||
if (lpa & LPA_1000HALF)
|
||||
result |= ADVERTISED_1000baseT_Half;
|
||||
if (lpa & LPA_1000FULL)
|
||||
result |= ADVERTISED_1000baseT_Full;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* ethtool_adv_to_mii_adv_x
|
||||
* @ethadv: the ethtool advertisement settings
|
||||
*
|
||||
* A small helper function that translates ethtool advertisement
|
||||
* settings to phy autonegotiation advertisements for the
|
||||
* MII_CTRL1000 register when in 1000Base-X mode.
|
||||
*/
|
||||
static inline u32 ethtool_adv_to_mii_adv_x(u32 ethadv)
|
||||
{
|
||||
u32 result = 0;
|
||||
|
||||
if (ethadv & ADVERTISED_1000baseT_Half)
|
||||
result |= ADVERTISE_1000XHALF;
|
||||
if (ethadv & ADVERTISED_1000baseT_Full)
|
||||
result |= ADVERTISE_1000XFULL;
|
||||
if (ethadv & ADVERTISED_Pause)
|
||||
result |= ADVERTISE_1000XPAUSE;
|
||||
if (ethadv & ADVERTISED_Asym_Pause)
|
||||
result |= ADVERTISE_1000XPSE_ASYM;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* mii_adv_to_ethtool_adv_x
|
||||
* @adv: value of the MII_CTRL1000 register
|
||||
*
|
||||
* A small helper function that translates MII_CTRL1000
|
||||
* bits, when in 1000Base-X mode, to ethtool
|
||||
* advertisement settings.
|
||||
*/
|
||||
static inline u32 mii_adv_to_ethtool_adv_x(u32 adv)
|
||||
{
|
||||
u32 result = 0;
|
||||
|
||||
if (adv & ADVERTISE_1000XHALF)
|
||||
result |= ADVERTISED_1000baseT_Half;
|
||||
if (adv & ADVERTISE_1000XFULL)
|
||||
result |= ADVERTISED_1000baseT_Full;
|
||||
if (adv & ADVERTISE_1000XPAUSE)
|
||||
result |= ADVERTISED_Pause;
|
||||
if (adv & ADVERTISE_1000XPSE_ASYM)
|
||||
result |= ADVERTISED_Asym_Pause;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* mii_lpa_to_ethtool_lpa_x
|
||||
* @adv: value of the MII_LPA register
|
||||
*
|
||||
* A small helper function that translates MII_LPA
|
||||
* bits, when in 1000Base-X mode, to ethtool
|
||||
* LP advertisement settings.
|
||||
*/
|
||||
static inline u32 mii_lpa_to_ethtool_lpa_x(u32 lpa)
|
||||
{
|
||||
u32 result = 0;
|
||||
|
||||
if (lpa & LPA_LPACK)
|
||||
result |= ADVERTISED_Autoneg;
|
||||
|
||||
return result | mii_adv_to_ethtool_adv_x(lpa);
|
||||
}
|
||||
|
||||
/**
|
||||
* mii_advertise_flowctrl - get flow control advertisement flags
|
||||
* @cap: Flow control capabilities (FLOW_CTRL_RX, FLOW_CTRL_TX or both)
|
||||
|
|
|
|||
|
|
@ -59,12 +59,15 @@ enum {
|
|||
MLX4_CMD_HW_HEALTH_CHECK = 0x50,
|
||||
MLX4_CMD_SET_PORT = 0xc,
|
||||
MLX4_CMD_SET_NODE = 0x5a,
|
||||
MLX4_CMD_QUERY_FUNC = 0x56,
|
||||
MLX4_CMD_ACCESS_DDR = 0x2e,
|
||||
MLX4_CMD_MAP_ICM = 0xffa,
|
||||
MLX4_CMD_UNMAP_ICM = 0xff9,
|
||||
MLX4_CMD_MAP_ICM_AUX = 0xffc,
|
||||
MLX4_CMD_UNMAP_ICM_AUX = 0xffb,
|
||||
MLX4_CMD_SET_ICM_SIZE = 0xffd,
|
||||
/*master notify fw on finish for slave's flr*/
|
||||
MLX4_CMD_INFORM_FLR_DONE = 0x5b,
|
||||
|
||||
/* TPT commands */
|
||||
MLX4_CMD_SW2HW_MPT = 0xd,
|
||||
|
|
@ -119,6 +122,26 @@ enum {
|
|||
/* miscellaneous commands */
|
||||
MLX4_CMD_DIAG_RPRT = 0x30,
|
||||
MLX4_CMD_NOP = 0x31,
|
||||
MLX4_CMD_ACCESS_MEM = 0x2e,
|
||||
MLX4_CMD_SET_VEP = 0x52,
|
||||
|
||||
/* Ethernet specific commands */
|
||||
MLX4_CMD_SET_VLAN_FLTR = 0x47,
|
||||
MLX4_CMD_SET_MCAST_FLTR = 0x48,
|
||||
MLX4_CMD_DUMP_ETH_STATS = 0x49,
|
||||
|
||||
/* Communication channel commands */
|
||||
MLX4_CMD_ARM_COMM_CHANNEL = 0x57,
|
||||
MLX4_CMD_GEN_EQE = 0x58,
|
||||
|
||||
/* virtual commands */
|
||||
MLX4_CMD_ALLOC_RES = 0xf00,
|
||||
MLX4_CMD_FREE_RES = 0xf01,
|
||||
MLX4_CMD_MCAST_ATTACH = 0xf05,
|
||||
MLX4_CMD_UCAST_ATTACH = 0xf06,
|
||||
MLX4_CMD_PROMISC = 0xf08,
|
||||
MLX4_CMD_QUERY_FUNC_CAP = 0xf0a,
|
||||
MLX4_CMD_QP_ATTACH = 0xf0b,
|
||||
|
||||
/* debug commands */
|
||||
MLX4_CMD_QUERY_DEBUG_MSG = 0x2a,
|
||||
|
|
@ -126,6 +149,7 @@ enum {
|
|||
|
||||
/* statistics commands */
|
||||
MLX4_CMD_QUERY_IF_STAT = 0X54,
|
||||
MLX4_CMD_SET_IF_STAT = 0X55,
|
||||
};
|
||||
|
||||
enum {
|
||||
|
|
@ -135,7 +159,8 @@ enum {
|
|||
};
|
||||
|
||||
enum {
|
||||
MLX4_MAILBOX_SIZE = 4096
|
||||
MLX4_MAILBOX_SIZE = 4096,
|
||||
MLX4_ACCESS_MEM_ALIGN = 256,
|
||||
};
|
||||
|
||||
enum {
|
||||
|
|
@ -148,6 +173,11 @@ enum {
|
|||
MLX4_SET_PORT_GID_TABLE = 0x5,
|
||||
};
|
||||
|
||||
enum {
|
||||
MLX4_CMD_WRAPPED,
|
||||
MLX4_CMD_NATIVE
|
||||
};
|
||||
|
||||
struct mlx4_dev;
|
||||
|
||||
struct mlx4_cmd_mailbox {
|
||||
|
|
@ -157,23 +187,24 @@ struct mlx4_cmd_mailbox {
|
|||
|
||||
int __mlx4_cmd(struct mlx4_dev *dev, u64 in_param, u64 *out_param,
|
||||
int out_is_imm, u32 in_modifier, u8 op_modifier,
|
||||
u16 op, unsigned long timeout);
|
||||
u16 op, unsigned long timeout, int native);
|
||||
|
||||
/* Invoke a command with no output parameter */
|
||||
static inline int mlx4_cmd(struct mlx4_dev *dev, u64 in_param, u32 in_modifier,
|
||||
u8 op_modifier, u16 op, unsigned long timeout)
|
||||
u8 op_modifier, u16 op, unsigned long timeout,
|
||||
int native)
|
||||
{
|
||||
return __mlx4_cmd(dev, in_param, NULL, 0, in_modifier,
|
||||
op_modifier, op, timeout);
|
||||
op_modifier, op, timeout, native);
|
||||
}
|
||||
|
||||
/* Invoke a command with an output mailbox */
|
||||
static inline int mlx4_cmd_box(struct mlx4_dev *dev, u64 in_param, u64 out_param,
|
||||
u32 in_modifier, u8 op_modifier, u16 op,
|
||||
unsigned long timeout)
|
||||
unsigned long timeout, int native)
|
||||
{
|
||||
return __mlx4_cmd(dev, in_param, &out_param, 0, in_modifier,
|
||||
op_modifier, op, timeout);
|
||||
op_modifier, op, timeout, native);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -183,13 +214,17 @@ static inline int mlx4_cmd_box(struct mlx4_dev *dev, u64 in_param, u64 out_param
|
|||
*/
|
||||
static inline int mlx4_cmd_imm(struct mlx4_dev *dev, u64 in_param, u64 *out_param,
|
||||
u32 in_modifier, u8 op_modifier, u16 op,
|
||||
unsigned long timeout)
|
||||
unsigned long timeout, int native)
|
||||
{
|
||||
return __mlx4_cmd(dev, in_param, out_param, 1, in_modifier,
|
||||
op_modifier, op, timeout);
|
||||
op_modifier, op, timeout, native);
|
||||
}
|
||||
|
||||
struct mlx4_cmd_mailbox *mlx4_alloc_cmd_mailbox(struct mlx4_dev *dev);
|
||||
void mlx4_free_cmd_mailbox(struct mlx4_dev *dev, struct mlx4_cmd_mailbox *mailbox);
|
||||
|
||||
u32 mlx4_comm_get_version(void);
|
||||
|
||||
#define MLX4_COMM_GET_IF_REV(cmd_chan_ver) (u8)((cmd_chan_ver) >> 8)
|
||||
|
||||
#endif /* MLX4_CMD_H */
|
||||
|
|
|
|||
|
|
@ -47,6 +47,9 @@
|
|||
enum {
|
||||
MLX4_FLAG_MSI_X = 1 << 0,
|
||||
MLX4_FLAG_OLD_PORT_CMDS = 1 << 1,
|
||||
MLX4_FLAG_MASTER = 1 << 2,
|
||||
MLX4_FLAG_SLAVE = 1 << 3,
|
||||
MLX4_FLAG_SRIOV = 1 << 4,
|
||||
};
|
||||
|
||||
enum {
|
||||
|
|
@ -57,6 +60,15 @@ enum {
|
|||
MLX4_BOARD_ID_LEN = 64
|
||||
};
|
||||
|
||||
enum {
|
||||
MLX4_MAX_NUM_PF = 16,
|
||||
MLX4_MAX_NUM_VF = 64,
|
||||
MLX4_MFUNC_MAX = 80,
|
||||
MLX4_MFUNC_EQ_NUM = 4,
|
||||
MLX4_MFUNC_MAX_EQES = 8,
|
||||
MLX4_MFUNC_EQE_MASK = (MLX4_MFUNC_MAX_EQES - 1)
|
||||
};
|
||||
|
||||
enum {
|
||||
MLX4_DEV_CAP_FLAG_RC = 1LL << 0,
|
||||
MLX4_DEV_CAP_FLAG_UC = 1LL << 1,
|
||||
|
|
@ -77,11 +89,13 @@ enum {
|
|||
MLX4_DEV_CAP_FLAG_IBOE = 1LL << 30,
|
||||
MLX4_DEV_CAP_FLAG_UC_LOOPBACK = 1LL << 32,
|
||||
MLX4_DEV_CAP_FLAG_FCS_KEEP = 1LL << 34,
|
||||
MLX4_DEV_CAP_FLAG_WOL = 1LL << 38,
|
||||
MLX4_DEV_CAP_FLAG_WOL_PORT1 = 1LL << 37,
|
||||
MLX4_DEV_CAP_FLAG_WOL_PORT2 = 1LL << 38,
|
||||
MLX4_DEV_CAP_FLAG_UDP_RSS = 1LL << 40,
|
||||
MLX4_DEV_CAP_FLAG_VEP_UC_STEER = 1LL << 41,
|
||||
MLX4_DEV_CAP_FLAG_VEP_MC_STEER = 1LL << 42,
|
||||
MLX4_DEV_CAP_FLAG_COUNTERS = 1LL << 48
|
||||
MLX4_DEV_CAP_FLAG_COUNTERS = 1LL << 48,
|
||||
MLX4_DEV_CAP_FLAG_SENSE_SUPPORT = 1LL << 55
|
||||
};
|
||||
|
||||
#define MLX4_ATTR_EXTENDED_PORT_INFO cpu_to_be16(0xff90)
|
||||
|
|
@ -116,7 +130,11 @@ enum mlx4_event {
|
|||
MLX4_EVENT_TYPE_PORT_CHANGE = 0x09,
|
||||
MLX4_EVENT_TYPE_EQ_OVERFLOW = 0x0f,
|
||||
MLX4_EVENT_TYPE_ECC_DETECT = 0x0e,
|
||||
MLX4_EVENT_TYPE_CMD = 0x0a
|
||||
MLX4_EVENT_TYPE_CMD = 0x0a,
|
||||
MLX4_EVENT_TYPE_VEP_UPDATE = 0x19,
|
||||
MLX4_EVENT_TYPE_COMM_CHANNEL = 0x18,
|
||||
MLX4_EVENT_TYPE_FLR_EVENT = 0x1c,
|
||||
MLX4_EVENT_TYPE_NONE = 0xff,
|
||||
};
|
||||
|
||||
enum {
|
||||
|
|
@ -183,6 +201,7 @@ enum mlx4_qp_region {
|
|||
};
|
||||
|
||||
enum mlx4_port_type {
|
||||
MLX4_PORT_TYPE_NONE = 0,
|
||||
MLX4_PORT_TYPE_IB = 1,
|
||||
MLX4_PORT_TYPE_ETH = 2,
|
||||
MLX4_PORT_TYPE_AUTO = 3
|
||||
|
|
@ -215,6 +234,7 @@ static inline u64 mlx4_fw_ver(u64 major, u64 minor, u64 subminor)
|
|||
|
||||
struct mlx4_caps {
|
||||
u64 fw_ver;
|
||||
u32 function;
|
||||
int num_ports;
|
||||
int vl_cap[MLX4_MAX_PORTS + 1];
|
||||
int ib_mtu_cap[MLX4_MAX_PORTS + 1];
|
||||
|
|
@ -229,6 +249,7 @@ struct mlx4_caps {
|
|||
u64 trans_code[MLX4_MAX_PORTS + 1];
|
||||
int local_ca_ack_delay;
|
||||
int num_uars;
|
||||
u32 uar_page_size;
|
||||
int bf_reg_size;
|
||||
int bf_regs_per_page;
|
||||
int max_sq_sg;
|
||||
|
|
@ -252,8 +273,7 @@ struct mlx4_caps {
|
|||
int num_comp_vectors;
|
||||
int comp_pool;
|
||||
int num_mpts;
|
||||
int num_mtt_segs;
|
||||
int mtts_per_seg;
|
||||
int num_mtts;
|
||||
int fmr_reserved_mtts;
|
||||
int reserved_mtts;
|
||||
int reserved_mrws;
|
||||
|
|
@ -283,7 +303,9 @@ struct mlx4_caps {
|
|||
int log_num_prios;
|
||||
enum mlx4_port_type port_type[MLX4_MAX_PORTS + 1];
|
||||
u8 supported_type[MLX4_MAX_PORTS + 1];
|
||||
u32 port_mask;
|
||||
u8 suggested_type[MLX4_MAX_PORTS + 1];
|
||||
u8 default_sense[MLX4_MAX_PORTS + 1];
|
||||
u32 port_mask[MLX4_MAX_PORTS + 1];
|
||||
enum mlx4_port_type possible_type[MLX4_MAX_PORTS + 1];
|
||||
u32 max_counters;
|
||||
u8 ext_port_cap[MLX4_MAX_PORTS + 1];
|
||||
|
|
@ -303,7 +325,7 @@ struct mlx4_buf {
|
|||
};
|
||||
|
||||
struct mlx4_mtt {
|
||||
u32 first_seg;
|
||||
u32 offset;
|
||||
int order;
|
||||
int page_shift;
|
||||
};
|
||||
|
|
@ -465,10 +487,12 @@ struct mlx4_counter {
|
|||
struct mlx4_dev {
|
||||
struct pci_dev *pdev;
|
||||
unsigned long flags;
|
||||
unsigned long num_slaves;
|
||||
struct mlx4_caps caps;
|
||||
struct radix_tree_root qp_table_tree;
|
||||
u8 rev_id;
|
||||
char board_id[MLX4_BOARD_ID_LEN];
|
||||
int num_vfs;
|
||||
};
|
||||
|
||||
struct mlx4_init_port_param {
|
||||
|
|
@ -487,14 +511,32 @@ struct mlx4_init_port_param {
|
|||
|
||||
#define mlx4_foreach_port(port, dev, type) \
|
||||
for ((port) = 1; (port) <= (dev)->caps.num_ports; (port)++) \
|
||||
if (((type) == MLX4_PORT_TYPE_IB ? (dev)->caps.port_mask : \
|
||||
~(dev)->caps.port_mask) & 1 << ((port) - 1))
|
||||
if ((type) == (dev)->caps.port_mask[(port)])
|
||||
|
||||
#define mlx4_foreach_ib_transport_port(port, dev) \
|
||||
for ((port) = 1; (port) <= (dev)->caps.num_ports; (port)++) \
|
||||
if (((dev)->caps.port_mask & 1 << ((port) - 1)) || \
|
||||
((dev)->caps.flags & MLX4_DEV_CAP_FLAG_IBOE))
|
||||
#define mlx4_foreach_ib_transport_port(port, dev) \
|
||||
for ((port) = 1; (port) <= (dev)->caps.num_ports; (port)++) \
|
||||
if (((dev)->caps.port_mask[port] == MLX4_PORT_TYPE_IB) || \
|
||||
((dev)->caps.flags & MLX4_DEV_CAP_FLAG_IBOE))
|
||||
|
||||
static inline int mlx4_is_master(struct mlx4_dev *dev)
|
||||
{
|
||||
return dev->flags & MLX4_FLAG_MASTER;
|
||||
}
|
||||
|
||||
static inline int mlx4_is_qp_reserved(struct mlx4_dev *dev, u32 qpn)
|
||||
{
|
||||
return (qpn < dev->caps.sqp_start + 8);
|
||||
}
|
||||
|
||||
static inline int mlx4_is_mfunc(struct mlx4_dev *dev)
|
||||
{
|
||||
return dev->flags & (MLX4_FLAG_SLAVE | MLX4_FLAG_MASTER);
|
||||
}
|
||||
|
||||
static inline int mlx4_is_slave(struct mlx4_dev *dev)
|
||||
{
|
||||
return dev->flags & MLX4_FLAG_SLAVE;
|
||||
}
|
||||
|
||||
int mlx4_buf_alloc(struct mlx4_dev *dev, int size, int max_direct,
|
||||
struct mlx4_buf *buf);
|
||||
|
|
@ -560,6 +602,10 @@ int mlx4_srq_query(struct mlx4_dev *dev, struct mlx4_srq *srq, int *limit_waterm
|
|||
int mlx4_INIT_PORT(struct mlx4_dev *dev, int port);
|
||||
int mlx4_CLOSE_PORT(struct mlx4_dev *dev, int port);
|
||||
|
||||
int mlx4_unicast_attach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16],
|
||||
int block_mcast_loopback, enum mlx4_protocol prot);
|
||||
int mlx4_unicast_detach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16],
|
||||
enum mlx4_protocol prot);
|
||||
int mlx4_multicast_attach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16],
|
||||
int block_mcast_loopback, enum mlx4_protocol protocol);
|
||||
int mlx4_multicast_detach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16],
|
||||
|
|
@ -570,9 +616,11 @@ int mlx4_unicast_promisc_add(struct mlx4_dev *dev, u32 qpn, u8 port);
|
|||
int mlx4_unicast_promisc_remove(struct mlx4_dev *dev, u32 qpn, u8 port);
|
||||
int mlx4_SET_MCAST_FLTR(struct mlx4_dev *dev, u8 port, u64 mac, u64 clear, u8 mode);
|
||||
|
||||
int mlx4_register_mac(struct mlx4_dev *dev, u8 port, u64 mac, int *qpn, u8 wrap);
|
||||
void mlx4_unregister_mac(struct mlx4_dev *dev, u8 port, int qpn);
|
||||
int mlx4_replace_mac(struct mlx4_dev *dev, u8 port, int qpn, u64 new_mac, u8 wrap);
|
||||
int mlx4_register_mac(struct mlx4_dev *dev, u8 port, u64 mac);
|
||||
void mlx4_unregister_mac(struct mlx4_dev *dev, u8 port, u64 mac);
|
||||
int mlx4_replace_mac(struct mlx4_dev *dev, u8 port, int qpn, u64 new_mac);
|
||||
int mlx4_get_eth_qp(struct mlx4_dev *dev, u8 port, u64 mac, int *qpn);
|
||||
void mlx4_put_eth_qp(struct mlx4_dev *dev, u8 port, u64 mac, int qpn);
|
||||
|
||||
int mlx4_find_cached_vlan(struct mlx4_dev *dev, u8 port, u16 vid, int *idx);
|
||||
int mlx4_register_vlan(struct mlx4_dev *dev, u8 port, u16 vlan, int *index);
|
||||
|
|
|
|||
|
|
@ -97,6 +97,33 @@ enum {
|
|||
MLX4_QP_BIT_RIC = 1 << 4,
|
||||
};
|
||||
|
||||
enum {
|
||||
MLX4_RSS_HASH_XOR = 0,
|
||||
MLX4_RSS_HASH_TOP = 1,
|
||||
|
||||
MLX4_RSS_UDP_IPV6 = 1 << 0,
|
||||
MLX4_RSS_UDP_IPV4 = 1 << 1,
|
||||
MLX4_RSS_TCP_IPV6 = 1 << 2,
|
||||
MLX4_RSS_IPV6 = 1 << 3,
|
||||
MLX4_RSS_TCP_IPV4 = 1 << 4,
|
||||
MLX4_RSS_IPV4 = 1 << 5,
|
||||
|
||||
/* offset of mlx4_rss_context within mlx4_qp_context.pri_path */
|
||||
MLX4_RSS_OFFSET_IN_QPC_PRI_PATH = 0x24,
|
||||
/* offset of being RSS indirection QP within mlx4_qp_context.flags */
|
||||
MLX4_RSS_QPC_FLAG_OFFSET = 13,
|
||||
};
|
||||
|
||||
struct mlx4_rss_context {
|
||||
__be32 base_qpn;
|
||||
__be32 default_qpn;
|
||||
u16 reserved;
|
||||
u8 hash_fn;
|
||||
u8 flags;
|
||||
__be32 rss_key[10];
|
||||
__be32 base_qpn_udp;
|
||||
};
|
||||
|
||||
struct mlx4_qp_path {
|
||||
u8 fl;
|
||||
u8 reserved1[2];
|
||||
|
|
@ -183,6 +210,7 @@ struct mlx4_wqe_ctrl_seg {
|
|||
* [4] IP checksum
|
||||
* [3:2] C (generate completion queue entry)
|
||||
* [1] SE (solicited event)
|
||||
* [0] FL (force loopback)
|
||||
*/
|
||||
__be32 srcrb_flags;
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -116,6 +116,7 @@ enum {
|
|||
NDTPA_PROXY_DELAY, /* u64, msecs */
|
||||
NDTPA_PROXY_QLEN, /* u32 */
|
||||
NDTPA_LOCKTIME, /* u64, msecs */
|
||||
NDTPA_QUEUE_LENBYTES, /* u32 */
|
||||
__NDTPA_MAX
|
||||
};
|
||||
#define NDTPA_MAX (__NDTPA_MAX - 1)
|
||||
|
|
|
|||
146
include/linux/netdev_features.h
Normal file
146
include/linux/netdev_features.h
Normal file
|
|
@ -0,0 +1,146 @@
|
|||
/*
|
||||
* Network device features.
|
||||
*
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version
|
||||
* 2 of the License, or (at your option) any later version.
|
||||
*/
|
||||
#ifndef _LINUX_NETDEV_FEATURES_H
|
||||
#define _LINUX_NETDEV_FEATURES_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
typedef u64 netdev_features_t;
|
||||
|
||||
enum {
|
||||
NETIF_F_SG_BIT, /* Scatter/gather IO. */
|
||||
NETIF_F_IP_CSUM_BIT, /* Can checksum TCP/UDP over IPv4. */
|
||||
__UNUSED_NETIF_F_1,
|
||||
NETIF_F_HW_CSUM_BIT, /* Can checksum all the packets. */
|
||||
NETIF_F_IPV6_CSUM_BIT, /* Can checksum TCP/UDP over IPV6 */
|
||||
NETIF_F_HIGHDMA_BIT, /* Can DMA to high memory. */
|
||||
NETIF_F_FRAGLIST_BIT, /* Scatter/gather IO. */
|
||||
NETIF_F_HW_VLAN_TX_BIT, /* Transmit VLAN hw acceleration */
|
||||
NETIF_F_HW_VLAN_RX_BIT, /* Receive VLAN hw acceleration */
|
||||
NETIF_F_HW_VLAN_FILTER_BIT, /* Receive filtering on VLAN */
|
||||
NETIF_F_VLAN_CHALLENGED_BIT, /* Device cannot handle VLAN packets */
|
||||
NETIF_F_GSO_BIT, /* Enable software GSO. */
|
||||
NETIF_F_LLTX_BIT, /* LockLess TX - deprecated. Please */
|
||||
/* do not use LLTX in new drivers */
|
||||
NETIF_F_NETNS_LOCAL_BIT, /* Does not change network namespaces */
|
||||
NETIF_F_GRO_BIT, /* Generic receive offload */
|
||||
NETIF_F_LRO_BIT, /* large receive offload */
|
||||
|
||||
/**/NETIF_F_GSO_SHIFT, /* keep the order of SKB_GSO_* bits */
|
||||
NETIF_F_TSO_BIT /* ... TCPv4 segmentation */
|
||||
= NETIF_F_GSO_SHIFT,
|
||||
NETIF_F_UFO_BIT, /* ... UDPv4 fragmentation */
|
||||
NETIF_F_GSO_ROBUST_BIT, /* ... ->SKB_GSO_DODGY */
|
||||
NETIF_F_TSO_ECN_BIT, /* ... TCP ECN support */
|
||||
NETIF_F_TSO6_BIT, /* ... TCPv6 segmentation */
|
||||
NETIF_F_FSO_BIT, /* ... FCoE segmentation */
|
||||
NETIF_F_GSO_RESERVED1, /* ... free (fill GSO_MASK to 8 bits) */
|
||||
/**/NETIF_F_GSO_LAST, /* [can't be last bit, see GSO_MASK] */
|
||||
NETIF_F_GSO_RESERVED2 /* ... free (fill GSO_MASK to 8 bits) */
|
||||
= NETIF_F_GSO_LAST,
|
||||
|
||||
NETIF_F_FCOE_CRC_BIT, /* FCoE CRC32 */
|
||||
NETIF_F_SCTP_CSUM_BIT, /* SCTP checksum offload */
|
||||
NETIF_F_FCOE_MTU_BIT, /* Supports max FCoE MTU, 2158 bytes*/
|
||||
NETIF_F_NTUPLE_BIT, /* N-tuple filters supported */
|
||||
NETIF_F_RXHASH_BIT, /* Receive hashing offload */
|
||||
NETIF_F_RXCSUM_BIT, /* Receive checksumming offload */
|
||||
NETIF_F_NOCACHE_COPY_BIT, /* Use no-cache copyfromuser */
|
||||
NETIF_F_LOOPBACK_BIT, /* Enable loopback */
|
||||
|
||||
/*
|
||||
* Add your fresh new feature above and remember to update
|
||||
* netdev_features_strings[] in net/core/ethtool.c and maybe
|
||||
* some feature mask #defines below. Please also describe it
|
||||
* in Documentation/networking/netdev-features.txt.
|
||||
*/
|
||||
|
||||
/**/NETDEV_FEATURE_COUNT
|
||||
};
|
||||
|
||||
/* copy'n'paste compression ;) */
|
||||
#define __NETIF_F_BIT(bit) ((netdev_features_t)1 << (bit))
|
||||
#define __NETIF_F(name) __NETIF_F_BIT(NETIF_F_##name##_BIT)
|
||||
|
||||
#define NETIF_F_FCOE_CRC __NETIF_F(FCOE_CRC)
|
||||
#define NETIF_F_FCOE_MTU __NETIF_F(FCOE_MTU)
|
||||
#define NETIF_F_FRAGLIST __NETIF_F(FRAGLIST)
|
||||
#define NETIF_F_FSO __NETIF_F(FSO)
|
||||
#define NETIF_F_GRO __NETIF_F(GRO)
|
||||
#define NETIF_F_GSO __NETIF_F(GSO)
|
||||
#define NETIF_F_GSO_ROBUST __NETIF_F(GSO_ROBUST)
|
||||
#define NETIF_F_HIGHDMA __NETIF_F(HIGHDMA)
|
||||
#define NETIF_F_HW_CSUM __NETIF_F(HW_CSUM)
|
||||
#define NETIF_F_HW_VLAN_FILTER __NETIF_F(HW_VLAN_FILTER)
|
||||
#define NETIF_F_HW_VLAN_RX __NETIF_F(HW_VLAN_RX)
|
||||
#define NETIF_F_HW_VLAN_TX __NETIF_F(HW_VLAN_TX)
|
||||
#define NETIF_F_IP_CSUM __NETIF_F(IP_CSUM)
|
||||
#define NETIF_F_IPV6_CSUM __NETIF_F(IPV6_CSUM)
|
||||
#define NETIF_F_LLTX __NETIF_F(LLTX)
|
||||
#define NETIF_F_LOOPBACK __NETIF_F(LOOPBACK)
|
||||
#define NETIF_F_LRO __NETIF_F(LRO)
|
||||
#define NETIF_F_NETNS_LOCAL __NETIF_F(NETNS_LOCAL)
|
||||
#define NETIF_F_NOCACHE_COPY __NETIF_F(NOCACHE_COPY)
|
||||
#define NETIF_F_NTUPLE __NETIF_F(NTUPLE)
|
||||
#define NETIF_F_RXCSUM __NETIF_F(RXCSUM)
|
||||
#define NETIF_F_RXHASH __NETIF_F(RXHASH)
|
||||
#define NETIF_F_SCTP_CSUM __NETIF_F(SCTP_CSUM)
|
||||
#define NETIF_F_SG __NETIF_F(SG)
|
||||
#define NETIF_F_TSO6 __NETIF_F(TSO6)
|
||||
#define NETIF_F_TSO_ECN __NETIF_F(TSO_ECN)
|
||||
#define NETIF_F_TSO __NETIF_F(TSO)
|
||||
#define NETIF_F_UFO __NETIF_F(UFO)
|
||||
#define NETIF_F_VLAN_CHALLENGED __NETIF_F(VLAN_CHALLENGED)
|
||||
|
||||
/* Features valid for ethtool to change */
|
||||
/* = all defined minus driver/device-class-related */
|
||||
#define NETIF_F_NEVER_CHANGE (NETIF_F_VLAN_CHALLENGED | \
|
||||
NETIF_F_LLTX | NETIF_F_NETNS_LOCAL)
|
||||
|
||||
/* remember that ((t)1 << t_BITS) is undefined in C99 */
|
||||
#define NETIF_F_ETHTOOL_BITS ((__NETIF_F_BIT(NETDEV_FEATURE_COUNT - 1) | \
|
||||
(__NETIF_F_BIT(NETDEV_FEATURE_COUNT - 1) - 1)) & \
|
||||
~NETIF_F_NEVER_CHANGE)
|
||||
|
||||
/* Segmentation offload feature mask */
|
||||
#define NETIF_F_GSO_MASK (__NETIF_F_BIT(NETIF_F_GSO_LAST + 1) - \
|
||||
__NETIF_F_BIT(NETIF_F_GSO_SHIFT))
|
||||
|
||||
/* List of features with software fallbacks. */
|
||||
#define NETIF_F_GSO_SOFTWARE (NETIF_F_TSO | NETIF_F_TSO_ECN | \
|
||||
NETIF_F_TSO6 | NETIF_F_UFO)
|
||||
|
||||
#define NETIF_F_GEN_CSUM NETIF_F_HW_CSUM
|
||||
#define NETIF_F_V4_CSUM (NETIF_F_GEN_CSUM | NETIF_F_IP_CSUM)
|
||||
#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_FCOE (NETIF_F_FCOE_CRC | NETIF_F_FCOE_MTU | \
|
||||
NETIF_F_FSO)
|
||||
|
||||
/*
|
||||
* If one device supports one of these features, then enable them
|
||||
* for all in netdev_increment_features.
|
||||
*/
|
||||
#define NETIF_F_ONE_FOR_ALL (NETIF_F_GSO_SOFTWARE | NETIF_F_GSO_ROBUST | \
|
||||
NETIF_F_SG | NETIF_F_HIGHDMA | \
|
||||
NETIF_F_FRAGLIST | NETIF_F_VLAN_CHALLENGED)
|
||||
/*
|
||||
* If one device doesn't support one of these features, then disable it
|
||||
* for all in netdev_increment_features.
|
||||
*/
|
||||
#define NETIF_F_ALL_FOR_ALL (NETIF_F_NOCACHE_COPY | NETIF_F_FSO)
|
||||
|
||||
/* changeable features with no special hardware requirements */
|
||||
#define NETIF_F_SOFT_FEATURES (NETIF_F_GSO | NETIF_F_GRO)
|
||||
|
||||
#endif /* _LINUX_NETDEV_FEATURES_H */
|
||||
|
|
@ -43,6 +43,7 @@
|
|||
#include <linux/rculist.h>
|
||||
#include <linux/dmaengine.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/dynamic_queue_limits.h>
|
||||
|
||||
#include <linux/ethtool.h>
|
||||
#include <net/net_namespace.h>
|
||||
|
|
@ -50,8 +51,10 @@
|
|||
#ifdef CONFIG_DCB
|
||||
#include <net/dcbnl.h>
|
||||
#endif
|
||||
#include <net/netprio_cgroup.h>
|
||||
|
||||
#include <linux/netdev_features.h>
|
||||
|
||||
struct vlan_group;
|
||||
struct netpoll_info;
|
||||
struct phy_device;
|
||||
/* 802.11 specific */
|
||||
|
|
@ -141,22 +144,20 @@ static inline bool dev_xmit_complete(int rc)
|
|||
* used.
|
||||
*/
|
||||
|
||||
#if defined(CONFIG_WLAN) || defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
|
||||
#if defined(CONFIG_WLAN) || IS_ENABLED(CONFIG_AX25)
|
||||
# if defined(CONFIG_MAC80211_MESH)
|
||||
# define LL_MAX_HEADER 128
|
||||
# else
|
||||
# define LL_MAX_HEADER 96
|
||||
# endif
|
||||
#elif defined(CONFIG_TR) || defined(CONFIG_TR_MODULE)
|
||||
#elif IS_ENABLED(CONFIG_TR)
|
||||
# define LL_MAX_HEADER 48
|
||||
#else
|
||||
# define LL_MAX_HEADER 32
|
||||
#endif
|
||||
|
||||
#if !defined(CONFIG_NET_IPIP) && !defined(CONFIG_NET_IPIP_MODULE) && \
|
||||
!defined(CONFIG_NET_IPGRE) && !defined(CONFIG_NET_IPGRE_MODULE) && \
|
||||
!defined(CONFIG_IPV6_SIT) && !defined(CONFIG_IPV6_SIT_MODULE) && \
|
||||
!defined(CONFIG_IPV6_TUNNEL) && !defined(CONFIG_IPV6_TUNNEL_MODULE)
|
||||
#if !IS_ENABLED(CONFIG_NET_IPIP) && !IS_ENABLED(CONFIG_NET_IPGRE) && \
|
||||
!IS_ENABLED(CONFIG_IPV6_SIT) && !IS_ENABLED(CONFIG_IPV6_TUNNEL)
|
||||
#define MAX_HEADER LL_MAX_HEADER
|
||||
#else
|
||||
#define MAX_HEADER (LL_MAX_HEADER + 48)
|
||||
|
|
@ -212,6 +213,11 @@ enum {
|
|||
#include <linux/cache.h>
|
||||
#include <linux/skbuff.h>
|
||||
|
||||
#ifdef CONFIG_RPS
|
||||
#include <linux/jump_label.h>
|
||||
extern struct jump_label_key rps_needed;
|
||||
#endif
|
||||
|
||||
struct neighbour;
|
||||
struct neigh_parms;
|
||||
struct sk_buff;
|
||||
|
|
@ -272,16 +278,11 @@ struct hh_cache {
|
|||
*
|
||||
* We could use other alignment values, but we must maintain the
|
||||
* relationship HH alignment <= LL alignment.
|
||||
*
|
||||
* LL_ALLOCATED_SPACE also takes into account the tailroom the device
|
||||
* may need.
|
||||
*/
|
||||
#define LL_RESERVED_SPACE(dev) \
|
||||
((((dev)->hard_header_len+(dev)->needed_headroom)&~(HH_DATA_MOD - 1)) + HH_DATA_MOD)
|
||||
#define LL_RESERVED_SPACE_EXTRA(dev,extra) \
|
||||
((((dev)->hard_header_len+(dev)->needed_headroom+(extra))&~(HH_DATA_MOD - 1)) + HH_DATA_MOD)
|
||||
#define LL_ALLOCATED_SPACE(dev) \
|
||||
((((dev)->hard_header_len+(dev)->needed_headroom+(dev)->needed_tailroom)&~(HH_DATA_MOD - 1)) + HH_DATA_MOD)
|
||||
|
||||
struct header_ops {
|
||||
int (*create) (struct sk_buff *skb, struct net_device *dev,
|
||||
|
|
@ -516,11 +517,23 @@ static inline void napi_synchronize(const struct napi_struct *n)
|
|||
#endif
|
||||
|
||||
enum netdev_queue_state_t {
|
||||
__QUEUE_STATE_XOFF,
|
||||
__QUEUE_STATE_DRV_XOFF,
|
||||
__QUEUE_STATE_STACK_XOFF,
|
||||
__QUEUE_STATE_FROZEN,
|
||||
#define QUEUE_STATE_XOFF_OR_FROZEN ((1 << __QUEUE_STATE_XOFF) | \
|
||||
(1 << __QUEUE_STATE_FROZEN))
|
||||
#define QUEUE_STATE_ANY_XOFF ((1 << __QUEUE_STATE_DRV_XOFF) | \
|
||||
(1 << __QUEUE_STATE_STACK_XOFF))
|
||||
#define QUEUE_STATE_ANY_XOFF_OR_FROZEN (QUEUE_STATE_ANY_XOFF | \
|
||||
(1 << __QUEUE_STATE_FROZEN))
|
||||
};
|
||||
/*
|
||||
* __QUEUE_STATE_DRV_XOFF is used by drivers to stop the transmit queue. The
|
||||
* netif_tx_* functions below are used to manipulate this flag. The
|
||||
* __QUEUE_STATE_STACK_XOFF flag is used by the stack to stop the transmit
|
||||
* queue independently. The netif_xmit_*stopped functions below are called
|
||||
* to check if the queue has been stopped by the driver or stack (either
|
||||
* of the XOFF bits are set in the state). Drivers should not need to call
|
||||
* netif_xmit*stopped functions, they should only be using netif_tx_*.
|
||||
*/
|
||||
|
||||
struct netdev_queue {
|
||||
/*
|
||||
|
|
@ -528,9 +541,8 @@ struct netdev_queue {
|
|||
*/
|
||||
struct net_device *dev;
|
||||
struct Qdisc *qdisc;
|
||||
unsigned long state;
|
||||
struct Qdisc *qdisc_sleeping;
|
||||
#if defined(CONFIG_RPS) || defined(CONFIG_XPS)
|
||||
#ifdef CONFIG_SYSFS
|
||||
struct kobject kobj;
|
||||
#endif
|
||||
#if defined(CONFIG_XPS) && defined(CONFIG_NUMA)
|
||||
|
|
@ -545,6 +557,18 @@ struct netdev_queue {
|
|||
* please use this field instead of dev->trans_start
|
||||
*/
|
||||
unsigned long trans_start;
|
||||
|
||||
/*
|
||||
* Number of TX timeouts for this queue
|
||||
* (/sys/class/net/DEV/Q/trans_timeout)
|
||||
*/
|
||||
unsigned long trans_timeout;
|
||||
|
||||
unsigned long state;
|
||||
|
||||
#ifdef CONFIG_BQL
|
||||
struct dql dql;
|
||||
#endif
|
||||
} ____cacheline_aligned_in_smp;
|
||||
|
||||
static inline int netdev_queue_numa_node_read(const struct netdev_queue *q)
|
||||
|
|
@ -573,7 +597,7 @@ struct rps_map {
|
|||
struct rcu_head rcu;
|
||||
u16 cpus[0];
|
||||
};
|
||||
#define RPS_MAP_SIZE(_num) (sizeof(struct rps_map) + (_num * sizeof(u16)))
|
||||
#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, the
|
||||
|
|
@ -597,7 +621,7 @@ struct rps_dev_flow_table {
|
|||
struct rps_dev_flow flows[0];
|
||||
};
|
||||
#define RPS_DEV_FLOW_TABLE_SIZE(_num) (sizeof(struct rps_dev_flow_table) + \
|
||||
(_num * sizeof(struct rps_dev_flow)))
|
||||
((_num) * sizeof(struct rps_dev_flow)))
|
||||
|
||||
/*
|
||||
* The rps_sock_flow_table contains mappings of flows to the last CPU
|
||||
|
|
@ -608,7 +632,7 @@ struct rps_sock_flow_table {
|
|||
u16 ents[0];
|
||||
};
|
||||
#define RPS_SOCK_FLOW_TABLE_SIZE(_num) (sizeof(struct rps_sock_flow_table) + \
|
||||
(_num * sizeof(u16)))
|
||||
((_num) * sizeof(u16)))
|
||||
|
||||
#define RPS_NO_CPU 0xffff
|
||||
|
||||
|
|
@ -660,7 +684,7 @@ struct xps_map {
|
|||
struct rcu_head rcu;
|
||||
u16 queues[0];
|
||||
};
|
||||
#define XPS_MAP_SIZE(_num) (sizeof(struct xps_map) + (_num * sizeof(u16)))
|
||||
#define XPS_MAP_SIZE(_num) (sizeof(struct xps_map) + ((_num) * sizeof(u16)))
|
||||
#define XPS_MIN_MAP_ALLOC ((L1_CACHE_BYTES - sizeof(struct xps_map)) \
|
||||
/ sizeof(u16))
|
||||
|
||||
|
|
@ -683,6 +707,23 @@ struct netdev_tc_txq {
|
|||
u16 offset;
|
||||
};
|
||||
|
||||
#if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE)
|
||||
/*
|
||||
* This structure is to hold information about the device
|
||||
* configured to run FCoE protocol stack.
|
||||
*/
|
||||
struct netdev_fcoe_hbainfo {
|
||||
char manufacturer[64];
|
||||
char serial_number[64];
|
||||
char hardware_version[64];
|
||||
char driver_version[64];
|
||||
char optionrom_version[64];
|
||||
char firmware_version[64];
|
||||
char model[256];
|
||||
char model_description[256];
|
||||
};
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This structure defines the management hooks for network devices.
|
||||
* The following hooks can be defined; unless noted otherwise, they are
|
||||
|
|
@ -767,11 +808,11 @@ struct netdev_tc_txq {
|
|||
* 3. Update dev->stats asynchronously and atomically, and define
|
||||
* neither operation.
|
||||
*
|
||||
* void (*ndo_vlan_rx_add_vid)(struct net_device *dev, unsigned short vid);
|
||||
* int (*ndo_vlan_rx_add_vid)(struct net_device *dev, unsigned short vid);
|
||||
* If device support VLAN filtering (dev->features & NETIF_F_HW_VLAN_FILTER)
|
||||
* this function is called when a VLAN id is registered.
|
||||
*
|
||||
* void (*ndo_vlan_rx_kill_vid)(struct net_device *dev, unsigned short vid);
|
||||
* int (*ndo_vlan_rx_kill_vid)(struct net_device *dev, unsigned short vid);
|
||||
* If device support VLAN filtering (dev->features & NETIF_F_HW_VLAN_FILTER)
|
||||
* this function is called when a VLAN id is unregistered.
|
||||
*
|
||||
|
|
@ -823,6 +864,13 @@ struct netdev_tc_txq {
|
|||
* 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_hbainfo)(struct net_device *dev,
|
||||
* struct netdev_fcoe_hbainfo *hbainfo);
|
||||
* Called when the FCoE Protocol stack wants information on the underlying
|
||||
* device. This information is utilized by the FCoE protocol stack to
|
||||
* register attributes with Fiber Channel management service as per the
|
||||
* FC-GS Fabric Device Management Information(FDMI) specification.
|
||||
*
|
||||
* 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
|
||||
|
|
@ -845,12 +893,13 @@ struct netdev_tc_txq {
|
|||
* Called to release previously enslaved netdev.
|
||||
*
|
||||
* Feature/offload setting functions.
|
||||
* u32 (*ndo_fix_features)(struct net_device *dev, u32 features);
|
||||
* netdev_features_t (*ndo_fix_features)(struct net_device *dev,
|
||||
* netdev_features_t 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);
|
||||
* int (*ndo_set_features)(struct net_device *dev, netdev_features_t 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.
|
||||
|
|
@ -885,9 +934,9 @@ struct net_device_ops {
|
|||
struct rtnl_link_stats64 *storage);
|
||||
struct net_device_stats* (*ndo_get_stats)(struct net_device *dev);
|
||||
|
||||
void (*ndo_vlan_rx_add_vid)(struct net_device *dev,
|
||||
int (*ndo_vlan_rx_add_vid)(struct net_device *dev,
|
||||
unsigned short vid);
|
||||
void (*ndo_vlan_rx_kill_vid)(struct net_device *dev,
|
||||
int (*ndo_vlan_rx_kill_vid)(struct net_device *dev,
|
||||
unsigned short vid);
|
||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
void (*ndo_poll_controller)(struct net_device *dev);
|
||||
|
|
@ -912,7 +961,7 @@ struct net_device_ops {
|
|||
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)
|
||||
#if IS_ENABLED(CONFIG_FCOE)
|
||||
int (*ndo_fcoe_enable)(struct net_device *dev);
|
||||
int (*ndo_fcoe_disable)(struct net_device *dev);
|
||||
int (*ndo_fcoe_ddp_setup)(struct net_device *dev,
|
||||
|
|
@ -925,9 +974,11 @@ struct net_device_ops {
|
|||
u16 xid,
|
||||
struct scatterlist *sgl,
|
||||
unsigned int sgc);
|
||||
int (*ndo_fcoe_get_hbainfo)(struct net_device *dev,
|
||||
struct netdev_fcoe_hbainfo *hbainfo);
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_LIBFCOE) || defined(CONFIG_LIBFCOE_MODULE)
|
||||
#if IS_ENABLED(CONFIG_LIBFCOE)
|
||||
#define NETDEV_FCOE_WWNN 0
|
||||
#define NETDEV_FCOE_WWPN 1
|
||||
int (*ndo_fcoe_get_wwn)(struct net_device *dev,
|
||||
|
|
@ -944,10 +995,12 @@ struct net_device_ops {
|
|||
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);
|
||||
netdev_features_t (*ndo_fix_features)(struct net_device *dev,
|
||||
netdev_features_t features);
|
||||
int (*ndo_set_features)(struct net_device *dev,
|
||||
u32 features);
|
||||
netdev_features_t features);
|
||||
int (*ndo_neigh_construct)(struct neighbour *n);
|
||||
void (*ndo_neigh_destroy)(struct neighbour *n);
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -997,91 +1050,13 @@ struct net_device {
|
|||
struct list_head unreg_list;
|
||||
|
||||
/* currently active device features */
|
||||
u32 features;
|
||||
netdev_features_t features;
|
||||
/* user-changeable features */
|
||||
u32 hw_features;
|
||||
netdev_features_t hw_features;
|
||||
/* user-requested features */
|
||||
u32 wanted_features;
|
||||
netdev_features_t wanted_features;
|
||||
/* mask of features inheritable by VLAN devices */
|
||||
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. */
|
||||
#define NETIF_F_HW_CSUM 8 /* Can checksum all the packets. */
|
||||
#define NETIF_F_IPV6_CSUM 16 /* Can checksum TCP/UDP over IPV6 */
|
||||
#define NETIF_F_HIGHDMA 32 /* Can DMA to high memory. */
|
||||
#define NETIF_F_FRAGLIST 64 /* Scatter/gather IO. */
|
||||
#define NETIF_F_HW_VLAN_TX 128 /* Transmit VLAN hw acceleration */
|
||||
#define NETIF_F_HW_VLAN_RX 256 /* Receive VLAN hw acceleration */
|
||||
#define NETIF_F_HW_VLAN_FILTER 512 /* Receive filtering on VLAN */
|
||||
#define NETIF_F_VLAN_CHALLENGED 1024 /* Device cannot handle VLAN packets */
|
||||
#define NETIF_F_GSO 2048 /* Enable software GSO. */
|
||||
#define NETIF_F_LLTX 4096 /* LockLess TX - deprecated. Please */
|
||||
/* do not use LLTX in new drivers */
|
||||
#define NETIF_F_NETNS_LOCAL 8192 /* Does not change network namespaces */
|
||||
#define NETIF_F_GRO 16384 /* Generic receive offload */
|
||||
#define NETIF_F_LRO 32768 /* large receive offload */
|
||||
|
||||
/* the GSO_MASK reserves bits 16 through 23 */
|
||||
#define NETIF_F_FCOE_CRC (1 << 24) /* FCoE CRC32 */
|
||||
#define NETIF_F_SCTP_CSUM (1 << 25) /* SCTP checksum offload */
|
||||
#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 */
|
||||
#define NETIF_F_NOCACHE_COPY (1 << 30) /* Use no-cache copyfromuser */
|
||||
#define NETIF_F_LOOPBACK (1 << 31) /* Enable loopback */
|
||||
|
||||
/* Segmentation offload features */
|
||||
#define NETIF_F_GSO_SHIFT 16
|
||||
#define NETIF_F_GSO_MASK 0x00ff0000
|
||||
#define NETIF_F_TSO (SKB_GSO_TCPV4 << NETIF_F_GSO_SHIFT)
|
||||
#define NETIF_F_UFO (SKB_GSO_UDP << NETIF_F_GSO_SHIFT)
|
||||
#define NETIF_F_GSO_ROBUST (SKB_GSO_DODGY << NETIF_F_GSO_SHIFT)
|
||||
#define NETIF_F_TSO_ECN (SKB_GSO_TCP_ECN << NETIF_F_GSO_SHIFT)
|
||||
#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_VLAN_CHALLENGED | \
|
||||
NETIF_F_LLTX | NETIF_F_NETNS_LOCAL)
|
||||
#define NETIF_F_ETHTOOL_BITS (0xff3fffff & ~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)
|
||||
|
||||
|
||||
#define NETIF_F_GEN_CSUM (NETIF_F_NO_CSUM | NETIF_F_HW_CSUM)
|
||||
#define NETIF_F_V4_CSUM (NETIF_F_GEN_CSUM | NETIF_F_IP_CSUM)
|
||||
#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_FCOE (NETIF_F_FCOE_CRC | NETIF_F_FCOE_MTU | \
|
||||
NETIF_F_FSO)
|
||||
|
||||
/*
|
||||
* If one device supports one of these features, then enable them
|
||||
* for all in netdev_increment_features.
|
||||
*/
|
||||
#define NETIF_F_ONE_FOR_ALL (NETIF_F_GSO_SOFTWARE | NETIF_F_GSO_ROBUST | \
|
||||
NETIF_F_SG | NETIF_F_HIGHDMA | \
|
||||
NETIF_F_FRAGLIST | NETIF_F_VLAN_CHALLENGED)
|
||||
/*
|
||||
* If one device doesn't support one of these features, then disable it
|
||||
* for all in netdev_increment_features.
|
||||
*/
|
||||
#define NETIF_F_ALL_FOR_ALL (NETIF_F_NOCACHE_COPY | NETIF_F_FSO)
|
||||
|
||||
/* changeable features with no special hardware requirements */
|
||||
#define NETIF_F_SOFT_FEATURES (NETIF_F_GSO | NETIF_F_GRO)
|
||||
netdev_features_t vlan_features;
|
||||
|
||||
/* Interface index. Unique device identifier */
|
||||
int ifindex;
|
||||
|
|
@ -1132,6 +1107,7 @@ struct net_device {
|
|||
unsigned char perm_addr[MAX_ADDR_LEN]; /* permanent hw address */
|
||||
unsigned char addr_assign_type; /* hw address assignment type */
|
||||
unsigned char addr_len; /* hardware address length */
|
||||
unsigned char neigh_priv_len;
|
||||
unsigned short dev_id; /* for shared network cards */
|
||||
|
||||
spinlock_t addr_list_lock;
|
||||
|
|
@ -1144,11 +1120,11 @@ struct net_device {
|
|||
|
||||
/* Protocol specific pointers */
|
||||
|
||||
#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
|
||||
struct vlan_group __rcu *vlgrp; /* VLAN group */
|
||||
#if IS_ENABLED(CONFIG_VLAN_8021Q)
|
||||
struct vlan_info __rcu *vlan_info; /* VLAN info */
|
||||
#endif
|
||||
#ifdef CONFIG_NET_DSA
|
||||
void *dsa_ptr; /* dsa specific data */
|
||||
#if IS_ENABLED(CONFIG_NET_DSA)
|
||||
struct dsa_switch_tree *dsa_ptr; /* dsa specific data */
|
||||
#endif
|
||||
void *atalk_ptr; /* AppleTalk link */
|
||||
struct in_device __rcu *ip_ptr; /* IPv4 specific data */
|
||||
|
|
@ -1184,9 +1160,11 @@ struct net_device {
|
|||
|
||||
unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */
|
||||
|
||||
#if defined(CONFIG_RPS) || defined(CONFIG_XPS)
|
||||
#ifdef CONFIG_SYSFS
|
||||
struct kset *queues_kset;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_RPS
|
||||
struct netdev_rx_queue *_rx;
|
||||
|
||||
/* Number of RX queues allocated at register_netdev() time */
|
||||
|
|
@ -1308,9 +1286,12 @@ struct net_device {
|
|||
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)
|
||||
#if IS_ENABLED(CONFIG_FCOE)
|
||||
/* max exchange id for FCoE LRO by ddp */
|
||||
unsigned int fcoe_ddp_xid;
|
||||
#endif
|
||||
#if IS_ENABLED(CONFIG_NETPRIO_CGROUP)
|
||||
struct netprio_map __rcu *priomap;
|
||||
#endif
|
||||
/* phy device may attach itself for hardware timestamping */
|
||||
struct phy_device *phydev;
|
||||
|
|
@ -1515,7 +1496,7 @@ struct packet_type {
|
|||
struct packet_type *,
|
||||
struct net_device *);
|
||||
struct sk_buff *(*gso_segment)(struct sk_buff *skb,
|
||||
u32 features);
|
||||
netdev_features_t features);
|
||||
int (*gso_send_check)(struct sk_buff *skb);
|
||||
struct sk_buff **(*gro_receive)(struct sk_buff **head,
|
||||
struct sk_buff *skb);
|
||||
|
|
@ -1783,7 +1764,7 @@ extern void __netif_schedule(struct Qdisc *q);
|
|||
|
||||
static inline void netif_schedule_queue(struct netdev_queue *txq)
|
||||
{
|
||||
if (!test_bit(__QUEUE_STATE_XOFF, &txq->state))
|
||||
if (!(txq->state & QUEUE_STATE_ANY_XOFF))
|
||||
__netif_schedule(txq->qdisc);
|
||||
}
|
||||
|
||||
|
|
@ -1797,7 +1778,7 @@ static inline void netif_tx_schedule_all(struct net_device *dev)
|
|||
|
||||
static inline void netif_tx_start_queue(struct netdev_queue *dev_queue)
|
||||
{
|
||||
clear_bit(__QUEUE_STATE_XOFF, &dev_queue->state);
|
||||
clear_bit(__QUEUE_STATE_DRV_XOFF, &dev_queue->state);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1829,7 +1810,7 @@ static inline void netif_tx_wake_queue(struct netdev_queue *dev_queue)
|
|||
return;
|
||||
}
|
||||
#endif
|
||||
if (test_and_clear_bit(__QUEUE_STATE_XOFF, &dev_queue->state))
|
||||
if (test_and_clear_bit(__QUEUE_STATE_DRV_XOFF, &dev_queue->state))
|
||||
__netif_schedule(dev_queue->qdisc);
|
||||
}
|
||||
|
||||
|
|
@ -1861,7 +1842,7 @@ static inline void netif_tx_stop_queue(struct netdev_queue *dev_queue)
|
|||
pr_info("netif_stop_queue() cannot be called before register_netdev()\n");
|
||||
return;
|
||||
}
|
||||
set_bit(__QUEUE_STATE_XOFF, &dev_queue->state);
|
||||
set_bit(__QUEUE_STATE_DRV_XOFF, &dev_queue->state);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1888,7 +1869,7 @@ static inline void netif_tx_stop_all_queues(struct net_device *dev)
|
|||
|
||||
static inline int netif_tx_queue_stopped(const struct netdev_queue *dev_queue)
|
||||
{
|
||||
return test_bit(__QUEUE_STATE_XOFF, &dev_queue->state);
|
||||
return test_bit(__QUEUE_STATE_DRV_XOFF, &dev_queue->state);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1902,9 +1883,68 @@ static inline int netif_queue_stopped(const struct net_device *dev)
|
|||
return netif_tx_queue_stopped(netdev_get_tx_queue(dev, 0));
|
||||
}
|
||||
|
||||
static inline int netif_tx_queue_frozen_or_stopped(const struct netdev_queue *dev_queue)
|
||||
static inline int netif_xmit_stopped(const struct netdev_queue *dev_queue)
|
||||
{
|
||||
return dev_queue->state & QUEUE_STATE_XOFF_OR_FROZEN;
|
||||
return dev_queue->state & QUEUE_STATE_ANY_XOFF;
|
||||
}
|
||||
|
||||
static inline int netif_xmit_frozen_or_stopped(const struct netdev_queue *dev_queue)
|
||||
{
|
||||
return dev_queue->state & QUEUE_STATE_ANY_XOFF_OR_FROZEN;
|
||||
}
|
||||
|
||||
static inline void netdev_tx_sent_queue(struct netdev_queue *dev_queue,
|
||||
unsigned int bytes)
|
||||
{
|
||||
#ifdef CONFIG_BQL
|
||||
dql_queued(&dev_queue->dql, bytes);
|
||||
if (unlikely(dql_avail(&dev_queue->dql) < 0)) {
|
||||
set_bit(__QUEUE_STATE_STACK_XOFF, &dev_queue->state);
|
||||
if (unlikely(dql_avail(&dev_queue->dql) >= 0))
|
||||
clear_bit(__QUEUE_STATE_STACK_XOFF,
|
||||
&dev_queue->state);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void netdev_sent_queue(struct net_device *dev, unsigned int bytes)
|
||||
{
|
||||
netdev_tx_sent_queue(netdev_get_tx_queue(dev, 0), bytes);
|
||||
}
|
||||
|
||||
static inline void netdev_tx_completed_queue(struct netdev_queue *dev_queue,
|
||||
unsigned pkts, unsigned bytes)
|
||||
{
|
||||
#ifdef CONFIG_BQL
|
||||
if (likely(bytes)) {
|
||||
dql_completed(&dev_queue->dql, bytes);
|
||||
if (unlikely(test_bit(__QUEUE_STATE_STACK_XOFF,
|
||||
&dev_queue->state) &&
|
||||
dql_avail(&dev_queue->dql) >= 0)) {
|
||||
if (test_and_clear_bit(__QUEUE_STATE_STACK_XOFF,
|
||||
&dev_queue->state))
|
||||
netif_schedule_queue(dev_queue);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void netdev_completed_queue(struct net_device *dev,
|
||||
unsigned pkts, unsigned bytes)
|
||||
{
|
||||
netdev_tx_completed_queue(netdev_get_tx_queue(dev, 0), pkts, bytes);
|
||||
}
|
||||
|
||||
static inline void netdev_tx_reset_queue(struct netdev_queue *q)
|
||||
{
|
||||
#ifdef CONFIG_BQL
|
||||
dql_reset(&q->dql);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void netdev_reset_queue(struct net_device *dev_queue)
|
||||
{
|
||||
netdev_tx_reset_queue(netdev_get_tx_queue(dev_queue, 0));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1991,7 +2031,7 @@ static inline void netif_wake_subqueue(struct net_device *dev, u16 queue_index)
|
|||
if (netpoll_trap())
|
||||
return;
|
||||
#endif
|
||||
if (test_and_clear_bit(__QUEUE_STATE_XOFF, &txq->state))
|
||||
if (test_and_clear_bit(__QUEUE_STATE_DRV_XOFF, &txq->state))
|
||||
__netif_schedule(txq->qdisc);
|
||||
}
|
||||
|
||||
|
|
@ -2520,7 +2560,8 @@ 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, u32 features);
|
||||
extern struct sk_buff *skb_gso_segment(struct sk_buff *skb,
|
||||
netdev_features_t features);
|
||||
#ifdef CONFIG_BUG
|
||||
extern void netdev_rx_csum_fault(struct net_device *dev);
|
||||
#else
|
||||
|
|
@ -2549,11 +2590,13 @@ extern const char *netdev_drivername(const struct net_device *dev);
|
|||
|
||||
extern void linkwatch_run_queue(void);
|
||||
|
||||
static inline u32 netdev_get_wanted_features(struct net_device *dev)
|
||||
static inline netdev_features_t 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);
|
||||
netdev_features_t netdev_increment_features(netdev_features_t all,
|
||||
netdev_features_t one, netdev_features_t mask);
|
||||
int __netdev_update_features(struct net_device *dev);
|
||||
void netdev_update_features(struct net_device *dev);
|
||||
void netdev_change_features(struct net_device *dev);
|
||||
|
|
@ -2561,21 +2604,31 @@ void netdev_change_features(struct net_device *dev);
|
|||
void netif_stacked_transfer_operstate(const struct net_device *rootdev,
|
||||
struct net_device *dev);
|
||||
|
||||
u32 netif_skb_features(struct sk_buff *skb);
|
||||
netdev_features_t netif_skb_features(struct sk_buff *skb);
|
||||
|
||||
static inline int net_gso_ok(u32 features, int gso_type)
|
||||
static inline int net_gso_ok(netdev_features_t features, int gso_type)
|
||||
{
|
||||
int feature = gso_type << NETIF_F_GSO_SHIFT;
|
||||
netdev_features_t feature = gso_type << NETIF_F_GSO_SHIFT;
|
||||
|
||||
/* check flags correspondence */
|
||||
BUILD_BUG_ON(SKB_GSO_TCPV4 != (NETIF_F_TSO >> NETIF_F_GSO_SHIFT));
|
||||
BUILD_BUG_ON(SKB_GSO_UDP != (NETIF_F_UFO >> NETIF_F_GSO_SHIFT));
|
||||
BUILD_BUG_ON(SKB_GSO_DODGY != (NETIF_F_GSO_ROBUST >> NETIF_F_GSO_SHIFT));
|
||||
BUILD_BUG_ON(SKB_GSO_TCP_ECN != (NETIF_F_TSO_ECN >> NETIF_F_GSO_SHIFT));
|
||||
BUILD_BUG_ON(SKB_GSO_TCPV6 != (NETIF_F_TSO6 >> NETIF_F_GSO_SHIFT));
|
||||
BUILD_BUG_ON(SKB_GSO_FCOE != (NETIF_F_FSO >> NETIF_F_GSO_SHIFT));
|
||||
|
||||
return (features & feature) == feature;
|
||||
}
|
||||
|
||||
static inline int skb_gso_ok(struct sk_buff *skb, u32 features)
|
||||
static inline int skb_gso_ok(struct sk_buff *skb, netdev_features_t features)
|
||||
{
|
||||
return net_gso_ok(features, skb_shinfo(skb)->gso_type) &&
|
||||
(!skb_has_frag_list(skb) || (features & NETIF_F_FRAGLIST));
|
||||
}
|
||||
|
||||
static inline int netif_needs_gso(struct sk_buff *skb, int features)
|
||||
static inline int netif_needs_gso(struct sk_buff *skb,
|
||||
netdev_features_t features)
|
||||
{
|
||||
return skb_is_gso(skb) && (!skb_gso_ok(skb, features) ||
|
||||
unlikely(skb->ip_summed != CHECKSUM_PARTIAL));
|
||||
|
|
@ -2594,22 +2647,6 @@ static inline int netif_is_bond_slave(struct net_device *dev)
|
|||
|
||||
extern struct pernet_operations __net_initdata loopback_net_ops;
|
||||
|
||||
static inline u32 dev_ethtool_get_rx_csum(struct net_device *dev)
|
||||
{
|
||||
if (dev->features & NETIF_F_RXCSUM)
|
||||
return 1;
|
||||
if (!dev->ethtool_ops || !dev->ethtool_ops->get_rx_csum)
|
||||
return 0;
|
||||
return dev->ethtool_ops->get_rx_csum(dev);
|
||||
}
|
||||
|
||||
static inline u32 dev_ethtool_get_flags(struct net_device *dev)
|
||||
{
|
||||
if (!dev->ethtool_ops || !dev->ethtool_ops->get_flags)
|
||||
return 0;
|
||||
return dev->ethtool_ops->get_flags(dev);
|
||||
}
|
||||
|
||||
/* Logging, debugging and troubleshooting/diagnostic helpers. */
|
||||
|
||||
/* netdev_printk helpers, similar to dev_printk */
|
||||
|
|
|
|||
|
|
@ -162,6 +162,24 @@ extern struct ctl_path nf_net_ipv4_netfilter_sysctl_path[];
|
|||
|
||||
extern struct list_head nf_hooks[NFPROTO_NUMPROTO][NF_MAX_HOOKS];
|
||||
|
||||
#if defined(CONFIG_JUMP_LABEL)
|
||||
#include <linux/jump_label.h>
|
||||
extern struct jump_label_key nf_hooks_needed[NFPROTO_NUMPROTO][NF_MAX_HOOKS];
|
||||
static inline bool nf_hooks_active(u_int8_t pf, unsigned int hook)
|
||||
{
|
||||
if (__builtin_constant_p(pf) &&
|
||||
__builtin_constant_p(hook))
|
||||
return static_branch(&nf_hooks_needed[pf][hook]);
|
||||
|
||||
return !list_empty(&nf_hooks[pf][hook]);
|
||||
}
|
||||
#else
|
||||
static inline bool nf_hooks_active(u_int8_t pf, unsigned int hook)
|
||||
{
|
||||
return !list_empty(&nf_hooks[pf][hook]);
|
||||
}
|
||||
#endif
|
||||
|
||||
int nf_hook_slow(u_int8_t pf, unsigned int hook, struct sk_buff *skb,
|
||||
struct net_device *indev, struct net_device *outdev,
|
||||
int (*okfn)(struct sk_buff *), int thresh);
|
||||
|
|
@ -179,11 +197,9 @@ static inline int nf_hook_thresh(u_int8_t pf, unsigned int hook,
|
|||
struct net_device *outdev,
|
||||
int (*okfn)(struct sk_buff *), int thresh)
|
||||
{
|
||||
#ifndef CONFIG_NETFILTER_DEBUG
|
||||
if (list_empty(&nf_hooks[pf][hook]))
|
||||
return 1;
|
||||
#endif
|
||||
return nf_hook_slow(pf, hook, skb, indev, outdev, okfn, thresh);
|
||||
if (nf_hooks_active(pf, hook))
|
||||
return nf_hook_slow(pf, hook, skb, indev, outdev, okfn, thresh);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline int nf_hook(u_int8_t pf, unsigned int hook, struct sk_buff *skb,
|
||||
|
|
|
|||
|
|
@ -5,7 +5,9 @@ header-y += nf_conntrack_ftp.h
|
|||
header-y += nf_conntrack_sctp.h
|
||||
header-y += nf_conntrack_tcp.h
|
||||
header-y += nf_conntrack_tuple_common.h
|
||||
header-y += nf_nat.h
|
||||
header-y += nfnetlink.h
|
||||
header-y += nfnetlink_acct.h
|
||||
header-y += nfnetlink_compat.h
|
||||
header-y += nfnetlink_conntrack.h
|
||||
header-y += nfnetlink_log.h
|
||||
|
|
@ -21,6 +23,7 @@ header-y += xt_DSCP.h
|
|||
header-y += xt_IDLETIMER.h
|
||||
header-y += xt_LED.h
|
||||
header-y += xt_MARK.h
|
||||
header-y += xt_nfacct.h
|
||||
header-y += xt_NFLOG.h
|
||||
header-y += xt_NFQUEUE.h
|
||||
header-y += xt_RATEEST.h
|
||||
|
|
@ -40,6 +43,7 @@ header-y += xt_cpu.h
|
|||
header-y += xt_dccp.h
|
||||
header-y += xt_devgroup.h
|
||||
header-y += xt_dscp.h
|
||||
header-y += xt_ecn.h
|
||||
header-y += xt_esp.h
|
||||
header-y += xt_hashlimit.h
|
||||
header-y += xt_helper.h
|
||||
|
|
|
|||
|
|
@ -83,6 +83,10 @@ enum ip_conntrack_status {
|
|||
/* Conntrack is a fake untracked entry */
|
||||
IPS_UNTRACKED_BIT = 12,
|
||||
IPS_UNTRACKED = (1 << IPS_UNTRACKED_BIT),
|
||||
|
||||
/* Conntrack has a userspace helper. */
|
||||
IPS_USERSPACE_HELPER_BIT = 13,
|
||||
IPS_USERSPACE_HELPER = (1 << IPS_USERSPACE_HELPER_BIT),
|
||||
};
|
||||
|
||||
/* Connection tracking event types */
|
||||
|
|
|
|||
|
|
@ -7,6 +7,33 @@ enum ip_conntrack_dir {
|
|||
IP_CT_DIR_MAX
|
||||
};
|
||||
|
||||
/* The protocol-specific manipulable parts of the tuple: always in
|
||||
* network order
|
||||
*/
|
||||
union nf_conntrack_man_proto {
|
||||
/* Add other protocols here. */
|
||||
__be16 all;
|
||||
|
||||
struct {
|
||||
__be16 port;
|
||||
} tcp;
|
||||
struct {
|
||||
__be16 port;
|
||||
} udp;
|
||||
struct {
|
||||
__be16 id;
|
||||
} icmp;
|
||||
struct {
|
||||
__be16 port;
|
||||
} dccp;
|
||||
struct {
|
||||
__be16 port;
|
||||
} sctp;
|
||||
struct {
|
||||
__be16 key; /* GRE key is 32bit, PPtP only uses 16bit */
|
||||
} gre;
|
||||
};
|
||||
|
||||
#define CTINFO2DIR(ctinfo) ((ctinfo) >= IP_CT_IS_REPLY ? IP_CT_DIR_REPLY : IP_CT_DIR_ORIGINAL)
|
||||
|
||||
#endif /* _NF_CONNTRACK_TUPLE_COMMON_H */
|
||||
|
|
|
|||
25
include/linux/netfilter/nf_nat.h
Normal file
25
include/linux/netfilter/nf_nat.h
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
#ifndef _NETFILTER_NF_NAT_H
|
||||
#define _NETFILTER_NF_NAT_H
|
||||
|
||||
#include <linux/netfilter.h>
|
||||
#include <linux/netfilter/nf_conntrack_tuple_common.h>
|
||||
|
||||
#define NF_NAT_RANGE_MAP_IPS 1
|
||||
#define NF_NAT_RANGE_PROTO_SPECIFIED 2
|
||||
#define NF_NAT_RANGE_PROTO_RANDOM 4
|
||||
#define NF_NAT_RANGE_PERSISTENT 8
|
||||
|
||||
struct nf_nat_ipv4_range {
|
||||
unsigned int flags;
|
||||
__be32 min_ip;
|
||||
__be32 max_ip;
|
||||
union nf_conntrack_man_proto min;
|
||||
union nf_conntrack_man_proto max;
|
||||
};
|
||||
|
||||
struct nf_nat_ipv4_multi_range_compat {
|
||||
unsigned int rangesize;
|
||||
struct nf_nat_ipv4_range range[1];
|
||||
};
|
||||
|
||||
#endif /* _NETFILTER_NF_NAT_H */
|
||||
|
|
@ -48,7 +48,8 @@ struct nfgenmsg {
|
|||
#define NFNL_SUBSYS_ULOG 4
|
||||
#define NFNL_SUBSYS_OSF 5
|
||||
#define NFNL_SUBSYS_IPSET 6
|
||||
#define NFNL_SUBSYS_COUNT 7
|
||||
#define NFNL_SUBSYS_ACCT 7
|
||||
#define NFNL_SUBSYS_COUNT 8
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
|
|
|
|||
36
include/linux/netfilter/nfnetlink_acct.h
Normal file
36
include/linux/netfilter/nfnetlink_acct.h
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
#ifndef _NFNL_ACCT_H_
|
||||
#define _NFNL_ACCT_H_
|
||||
|
||||
#ifndef NFACCT_NAME_MAX
|
||||
#define NFACCT_NAME_MAX 32
|
||||
#endif
|
||||
|
||||
enum nfnl_acct_msg_types {
|
||||
NFNL_MSG_ACCT_NEW,
|
||||
NFNL_MSG_ACCT_GET,
|
||||
NFNL_MSG_ACCT_GET_CTRZERO,
|
||||
NFNL_MSG_ACCT_DEL,
|
||||
NFNL_MSG_ACCT_MAX
|
||||
};
|
||||
|
||||
enum nfnl_acct_type {
|
||||
NFACCT_UNSPEC,
|
||||
NFACCT_NAME,
|
||||
NFACCT_PKTS,
|
||||
NFACCT_BYTES,
|
||||
NFACCT_USE,
|
||||
__NFACCT_MAX
|
||||
};
|
||||
#define NFACCT_MAX (__NFACCT_MAX - 1)
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
struct nf_acct;
|
||||
|
||||
extern struct nf_acct *nfnl_acct_find_get(const char *filter_name);
|
||||
extern void nfnl_acct_put(struct nf_acct *acct);
|
||||
extern void nfnl_acct_update(const struct sk_buff *skb, struct nf_acct *nfacct);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _NFNL_ACCT_H */
|
||||
|
|
@ -3,7 +3,8 @@
|
|||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define XT_CT_NOTRACK 0x1
|
||||
#define XT_CT_NOTRACK 0x1
|
||||
#define XT_CT_USERSPACE_HELPER 0x2
|
||||
|
||||
struct xt_ct_target_info {
|
||||
__u16 flags;
|
||||
|
|
|
|||
35
include/linux/netfilter/xt_ecn.h
Normal file
35
include/linux/netfilter/xt_ecn.h
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
/* iptables module for matching the ECN header in IPv4 and TCP header
|
||||
*
|
||||
* (C) 2002 Harald Welte <laforge@gnumonks.org>
|
||||
*
|
||||
* This software is distributed under GNU GPL v2, 1991
|
||||
*
|
||||
* ipt_ecn.h,v 1.4 2002/08/05 19:39:00 laforge Exp
|
||||
*/
|
||||
#ifndef _XT_ECN_H
|
||||
#define _XT_ECN_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/netfilter/xt_dscp.h>
|
||||
|
||||
#define XT_ECN_IP_MASK (~XT_DSCP_MASK)
|
||||
|
||||
#define XT_ECN_OP_MATCH_IP 0x01
|
||||
#define XT_ECN_OP_MATCH_ECE 0x10
|
||||
#define XT_ECN_OP_MATCH_CWR 0x20
|
||||
|
||||
#define XT_ECN_OP_MATCH_MASK 0xce
|
||||
|
||||
/* match info */
|
||||
struct xt_ecn_info {
|
||||
__u8 operation;
|
||||
__u8 invert;
|
||||
__u8 ip_ect;
|
||||
union {
|
||||
struct {
|
||||
__u8 ect;
|
||||
} tcp;
|
||||
} proto;
|
||||
};
|
||||
|
||||
#endif /* _XT_ECN_H */
|
||||
13
include/linux/netfilter/xt_nfacct.h
Normal file
13
include/linux/netfilter/xt_nfacct.h
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
#ifndef _XT_NFACCT_MATCH_H
|
||||
#define _XT_NFACCT_MATCH_H
|
||||
|
||||
#include <linux/netfilter/nfnetlink_acct.h>
|
||||
|
||||
struct nf_acct;
|
||||
|
||||
struct xt_nfacct_match_info {
|
||||
char name[NFACCT_NAME_MAX];
|
||||
struct nf_acct *nfacct;
|
||||
};
|
||||
|
||||
#endif /* _XT_NFACCT_MATCH_H */
|
||||
23
include/linux/netfilter/xt_rpfilter.h
Normal file
23
include/linux/netfilter/xt_rpfilter.h
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
#ifndef _XT_RPATH_H
|
||||
#define _XT_RPATH_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
enum {
|
||||
XT_RPFILTER_LOOSE = 1 << 0,
|
||||
XT_RPFILTER_VALID_MARK = 1 << 1,
|
||||
XT_RPFILTER_ACCEPT_LOCAL = 1 << 2,
|
||||
XT_RPFILTER_INVERT = 1 << 3,
|
||||
#ifdef __KERNEL__
|
||||
XT_RPFILTER_OPTION_MASK = XT_RPFILTER_LOOSE |
|
||||
XT_RPFILTER_VALID_MARK |
|
||||
XT_RPFILTER_ACCEPT_LOCAL |
|
||||
XT_RPFILTER_INVERT,
|
||||
#endif
|
||||
};
|
||||
|
||||
struct xt_rpfilter_info {
|
||||
__u8 flags;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -12,4 +12,3 @@ header-y += ipt_ah.h
|
|||
header-y += ipt_ecn.h
|
||||
header-y += ipt_realm.h
|
||||
header-y += ipt_ttl.h
|
||||
header-y += nf_nat.h
|
||||
|
|
|
|||
|
|
@ -1,35 +1,15 @@
|
|||
/* iptables module for matching the ECN header in IPv4 and TCP header
|
||||
*
|
||||
* (C) 2002 Harald Welte <laforge@gnumonks.org>
|
||||
*
|
||||
* This software is distributed under GNU GPL v2, 1991
|
||||
*
|
||||
* ipt_ecn.h,v 1.4 2002/08/05 19:39:00 laforge Exp
|
||||
*/
|
||||
#ifndef _IPT_ECN_H
|
||||
#define _IPT_ECN_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/netfilter/xt_dscp.h>
|
||||
#include <linux/netfilter/xt_ecn.h>
|
||||
#define ipt_ecn_info xt_ecn_info
|
||||
|
||||
#define IPT_ECN_IP_MASK (~XT_DSCP_MASK)
|
||||
|
||||
#define IPT_ECN_OP_MATCH_IP 0x01
|
||||
#define IPT_ECN_OP_MATCH_ECE 0x10
|
||||
#define IPT_ECN_OP_MATCH_CWR 0x20
|
||||
|
||||
#define IPT_ECN_OP_MATCH_MASK 0xce
|
||||
|
||||
/* match info */
|
||||
struct ipt_ecn_info {
|
||||
__u8 operation;
|
||||
__u8 invert;
|
||||
__u8 ip_ect;
|
||||
union {
|
||||
struct {
|
||||
__u8 ect;
|
||||
} tcp;
|
||||
} proto;
|
||||
enum {
|
||||
IPT_ECN_IP_MASK = XT_ECN_IP_MASK,
|
||||
IPT_ECN_OP_MATCH_IP = XT_ECN_OP_MATCH_IP,
|
||||
IPT_ECN_OP_MATCH_ECE = XT_ECN_OP_MATCH_ECE,
|
||||
IPT_ECN_OP_MATCH_CWR = XT_ECN_OP_MATCH_CWR,
|
||||
IPT_ECN_OP_MATCH_MASK = XT_ECN_OP_MATCH_MASK,
|
||||
};
|
||||
|
||||
#endif /* _IPT_ECN_H */
|
||||
#endif /* IPT_ECN_H */
|
||||
|
|
|
|||
|
|
@ -1,58 +0,0 @@
|
|||
#ifndef _LINUX_NF_NAT_H
|
||||
#define _LINUX_NF_NAT_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define IP_NAT_RANGE_MAP_IPS 1
|
||||
#define IP_NAT_RANGE_PROTO_SPECIFIED 2
|
||||
#define IP_NAT_RANGE_PROTO_RANDOM 4
|
||||
#define IP_NAT_RANGE_PERSISTENT 8
|
||||
|
||||
/* The protocol-specific manipulable parts of the tuple. */
|
||||
union nf_conntrack_man_proto {
|
||||
/* Add other protocols here. */
|
||||
__be16 all;
|
||||
|
||||
struct {
|
||||
__be16 port;
|
||||
} tcp;
|
||||
struct {
|
||||
__be16 port;
|
||||
} udp;
|
||||
struct {
|
||||
__be16 id;
|
||||
} icmp;
|
||||
struct {
|
||||
__be16 port;
|
||||
} dccp;
|
||||
struct {
|
||||
__be16 port;
|
||||
} sctp;
|
||||
struct {
|
||||
__be16 key; /* GRE key is 32bit, PPtP only uses 16bit */
|
||||
} gre;
|
||||
};
|
||||
|
||||
/* Single range specification. */
|
||||
struct nf_nat_range {
|
||||
/* Set to OR of flags above. */
|
||||
unsigned int flags;
|
||||
|
||||
/* Inclusive: network order. */
|
||||
__be32 min_ip, max_ip;
|
||||
|
||||
/* Inclusive: network order */
|
||||
union nf_conntrack_man_proto min, max;
|
||||
};
|
||||
|
||||
/* For backwards compat: don't use in modern code. */
|
||||
struct nf_nat_multi_range_compat {
|
||||
unsigned int rangesize; /* Must be 1. */
|
||||
|
||||
/* hangs off end. */
|
||||
struct nf_nat_range range[1];
|
||||
};
|
||||
|
||||
#define nf_nat_multi_range nf_nat_multi_range_compat
|
||||
|
||||
#endif
|
||||
|
|
@ -8,7 +8,7 @@
|
|||
#define NETLINK_UNUSED 1 /* Unused number */
|
||||
#define NETLINK_USERSOCK 2 /* Reserved for user mode socket protocols */
|
||||
#define NETLINK_FIREWALL 3 /* Firewalling hook */
|
||||
#define NETLINK_INET_DIAG 4 /* INET socket monitoring */
|
||||
#define NETLINK_SOCK_DIAG 4 /* socket monitoring */
|
||||
#define NETLINK_NFLOG 5 /* netfilter/iptables ULOG */
|
||||
#define NETLINK_XFRM 6 /* ipsec */
|
||||
#define NETLINK_SELINUX 7 /* SELinux event notifications */
|
||||
|
|
@ -27,6 +27,8 @@
|
|||
#define NETLINK_RDMA 20
|
||||
#define NETLINK_CRYPTO 21 /* Crypto layer */
|
||||
|
||||
#define NETLINK_INET_DIAG NETLINK_SOCK_DIAG
|
||||
|
||||
#define MAX_LINKS 32
|
||||
|
||||
struct sockaddr_nl {
|
||||
|
|
|
|||
|
|
@ -62,6 +62,8 @@ enum nfc_commands {
|
|||
NFC_CMD_GET_DEVICE,
|
||||
NFC_CMD_DEV_UP,
|
||||
NFC_CMD_DEV_DOWN,
|
||||
NFC_CMD_DEP_LINK_UP,
|
||||
NFC_CMD_DEP_LINK_DOWN,
|
||||
NFC_CMD_START_POLL,
|
||||
NFC_CMD_STOP_POLL,
|
||||
NFC_CMD_GET_TARGET,
|
||||
|
|
@ -86,6 +88,9 @@ enum nfc_commands {
|
|||
* @NFC_ATTR_TARGET_SENS_RES: NFC-A targets extra information such as NFCID
|
||||
* @NFC_ATTR_TARGET_SEL_RES: NFC-A targets extra information (useful if the
|
||||
* target is not NFC-Forum compliant)
|
||||
* @NFC_ATTR_TARGET_NFCID1: NFC-A targets identifier, max 10 bytes
|
||||
* @NFC_ATTR_COMM_MODE: Passive or active mode
|
||||
* @NFC_ATTR_RF_MODE: Initiator or target
|
||||
*/
|
||||
enum nfc_attrs {
|
||||
NFC_ATTR_UNSPEC,
|
||||
|
|
@ -95,6 +100,9 @@ enum nfc_attrs {
|
|||
NFC_ATTR_TARGET_INDEX,
|
||||
NFC_ATTR_TARGET_SENS_RES,
|
||||
NFC_ATTR_TARGET_SEL_RES,
|
||||
NFC_ATTR_TARGET_NFCID1,
|
||||
NFC_ATTR_COMM_MODE,
|
||||
NFC_ATTR_RF_MODE,
|
||||
/* private: internal use only */
|
||||
__NFC_ATTR_AFTER_LAST
|
||||
};
|
||||
|
|
@ -111,6 +119,14 @@ enum nfc_attrs {
|
|||
|
||||
#define NFC_PROTO_MAX 6
|
||||
|
||||
/* NFC communication modes */
|
||||
#define NFC_COMM_ACTIVE 0
|
||||
#define NFC_COMM_PASSIVE 1
|
||||
|
||||
/* NFC RF modes */
|
||||
#define NFC_RF_INITIATOR 0
|
||||
#define NFC_RF_TARGET 1
|
||||
|
||||
/* NFC protocols masks used in bitsets */
|
||||
#define NFC_PROTO_JEWEL_MASK (1 << NFC_PROTO_JEWEL)
|
||||
#define NFC_PROTO_MIFARE_MASK (1 << NFC_PROTO_MIFARE)
|
||||
|
|
@ -125,9 +141,22 @@ struct sockaddr_nfc {
|
|||
__u32 nfc_protocol;
|
||||
};
|
||||
|
||||
#define NFC_LLCP_MAX_SERVICE_NAME 63
|
||||
struct sockaddr_nfc_llcp {
|
||||
sa_family_t sa_family;
|
||||
__u32 dev_idx;
|
||||
__u32 target_idx;
|
||||
__u32 nfc_protocol;
|
||||
__u8 dsap; /* Destination SAP, if known */
|
||||
__u8 ssap; /* Source SAP to be bound to */
|
||||
char service_name[NFC_LLCP_MAX_SERVICE_NAME]; /* Service name URI */;
|
||||
size_t service_name_len;
|
||||
};
|
||||
|
||||
/* NFC socket protocols */
|
||||
#define NFC_SOCKPROTO_RAW 0
|
||||
#define NFC_SOCKPROTO_MAX 1
|
||||
#define NFC_SOCKPROTO_LLCP 1
|
||||
#define NFC_SOCKPROTO_MAX 2
|
||||
|
||||
#define NFC_HEADER_SIZE 1
|
||||
|
||||
|
|
|
|||
|
|
@ -509,6 +509,38 @@
|
|||
* @NL80211_CMD_TDLS_OPER: Perform a high-level TDLS command (e.g. link setup).
|
||||
* @NL80211_CMD_TDLS_MGMT: Send a TDLS management frame.
|
||||
*
|
||||
* @NL80211_CMD_UNEXPECTED_FRAME: Used by an application controlling an AP
|
||||
* (or GO) interface (i.e. hostapd) to ask for unexpected frames to
|
||||
* implement sending deauth to stations that send unexpected class 3
|
||||
* frames. Also used as the event sent by the kernel when such a frame
|
||||
* is received.
|
||||
* For the event, the %NL80211_ATTR_MAC attribute carries the TA and
|
||||
* other attributes like the interface index are present.
|
||||
* If used as the command it must have an interface index and you can
|
||||
* only unsubscribe from the event by closing the socket. Subscription
|
||||
* is also for %NL80211_CMD_UNEXPECTED_4ADDR_FRAME events.
|
||||
*
|
||||
* @NL80211_CMD_UNEXPECTED_4ADDR_FRAME: Sent as an event indicating that the
|
||||
* associated station identified by %NL80211_ATTR_MAC sent a 4addr frame
|
||||
* and wasn't already in a 4-addr VLAN. The event will be sent similarly
|
||||
* to the %NL80211_CMD_UNEXPECTED_FRAME event, to the same listener.
|
||||
*
|
||||
* @NL80211_CMD_PROBE_CLIENT: Probe an associated station on an AP interface
|
||||
* by sending a null data frame to it and reporting when the frame is
|
||||
* acknowleged. This is used to allow timing out inactive clients. Uses
|
||||
* %NL80211_ATTR_IFINDEX and %NL80211_ATTR_MAC. The command returns a
|
||||
* direct reply with an %NL80211_ATTR_COOKIE that is later used to match
|
||||
* up the event with the request. The event includes the same data and
|
||||
* has %NL80211_ATTR_ACK set if the frame was ACKed.
|
||||
*
|
||||
* @NL80211_CMD_REGISTER_BEACONS: Register this socket to receive beacons from
|
||||
* other BSSes when any interfaces are in AP mode. This helps implement
|
||||
* OLBC handling in hostapd. Beacons are reported in %NL80211_CMD_FRAME
|
||||
* messages. Note that per PHY only one application may register.
|
||||
*
|
||||
* @NL80211_CMD_SET_NOACK_MAP: sets a bitmap for the individual TIDs whether
|
||||
* No Acknowledgement Policy should be applied.
|
||||
*
|
||||
* @NL80211_CMD_MAX: highest used command number
|
||||
* @__NL80211_CMD_AFTER_LAST: internal use
|
||||
*/
|
||||
|
|
@ -638,6 +670,16 @@ enum nl80211_commands {
|
|||
NL80211_CMD_TDLS_OPER,
|
||||
NL80211_CMD_TDLS_MGMT,
|
||||
|
||||
NL80211_CMD_UNEXPECTED_FRAME,
|
||||
|
||||
NL80211_CMD_PROBE_CLIENT,
|
||||
|
||||
NL80211_CMD_REGISTER_BEACONS,
|
||||
|
||||
NL80211_CMD_UNEXPECTED_4ADDR_FRAME,
|
||||
|
||||
NL80211_CMD_SET_NOACK_MAP,
|
||||
|
||||
/* add new commands above here */
|
||||
|
||||
/* used to define NL80211_CMD_MAX below */
|
||||
|
|
@ -658,6 +700,8 @@ enum nl80211_commands {
|
|||
#define NL80211_CMD_DISASSOCIATE NL80211_CMD_DISASSOCIATE
|
||||
#define NL80211_CMD_REG_BEACON_HINT NL80211_CMD_REG_BEACON_HINT
|
||||
|
||||
#define NL80211_ATTR_FEATURE_FLAGS NL80211_ATTR_FEATURE_FLAGS
|
||||
|
||||
/* source-level API compatibility */
|
||||
#define NL80211_CMD_GET_MESH_PARAMS NL80211_CMD_GET_MESH_CONFIG
|
||||
#define NL80211_CMD_SET_MESH_PARAMS NL80211_CMD_SET_MESH_CONFIG
|
||||
|
|
@ -1109,6 +1153,46 @@ enum nl80211_commands {
|
|||
* %NL80211_CMD_TDLS_MGMT. Otherwise %NL80211_CMD_TDLS_OPER should be
|
||||
* used for asking the driver to perform a TDLS operation.
|
||||
*
|
||||
* @NL80211_ATTR_DEVICE_AP_SME: This u32 attribute may be listed for devices
|
||||
* that have AP support to indicate that they have the AP SME integrated
|
||||
* with support for the features listed in this attribute, see
|
||||
* &enum nl80211_ap_sme_features.
|
||||
*
|
||||
* @NL80211_ATTR_DONT_WAIT_FOR_ACK: Used with %NL80211_CMD_FRAME, this tells
|
||||
* the driver to not wait for an acknowledgement. Note that due to this,
|
||||
* it will also not give a status callback nor return a cookie. This is
|
||||
* mostly useful for probe responses to save airtime.
|
||||
*
|
||||
* @NL80211_ATTR_FEATURE_FLAGS: This u32 attribute contains flags from
|
||||
* &enum nl80211_feature_flags and is advertised in wiphy information.
|
||||
* @NL80211_ATTR_PROBE_RESP_OFFLOAD: Indicates that the HW responds to probe
|
||||
*
|
||||
* requests while operating in AP-mode.
|
||||
* This attribute holds a bitmap of the supported protocols for
|
||||
* offloading (see &enum nl80211_probe_resp_offload_support_attr).
|
||||
*
|
||||
* @NL80211_ATTR_PROBE_RESP: Probe Response template data. Contains the entire
|
||||
* probe-response frame. The DA field in the 802.11 header is zero-ed out,
|
||||
* to be filled by the FW.
|
||||
* @NL80211_ATTR_DISABLE_HT: Force HT capable interfaces to disable
|
||||
* this feature. Currently, only supported in mac80211 drivers.
|
||||
* @NL80211_ATTR_HT_CAPABILITY_MASK: Specify which bits of the
|
||||
* ATTR_HT_CAPABILITY to which attention should be paid.
|
||||
* Currently, only mac80211 NICs support this feature.
|
||||
* The values that may be configured are:
|
||||
* MCS rates, MAX-AMSDU, HT-20-40 and HT_CAP_SGI_40
|
||||
* AMPDU density and AMPDU factor.
|
||||
* All values are treated as suggestions and may be ignored
|
||||
* by the driver as required. The actual values may be seen in
|
||||
* the station debugfs ht_caps file.
|
||||
*
|
||||
* @NL80211_ATTR_DFS_REGION: region for regulatory rules which this country
|
||||
* abides to when initiating radiation on DFS channels. A country maps
|
||||
* to one DFS region.
|
||||
*
|
||||
* @NL80211_ATTR_NOACK_MAP: This u16 bitmap contains the No Ack Policy of
|
||||
* up to 16 TIDs.
|
||||
*
|
||||
* @NL80211_ATTR_MAX: highest attribute number currently defined
|
||||
* @__NL80211_ATTR_AFTER_LAST: internal use
|
||||
*/
|
||||
|
|
@ -1337,6 +1421,23 @@ enum nl80211_attrs {
|
|||
NL80211_ATTR_TDLS_SUPPORT,
|
||||
NL80211_ATTR_TDLS_EXTERNAL_SETUP,
|
||||
|
||||
NL80211_ATTR_DEVICE_AP_SME,
|
||||
|
||||
NL80211_ATTR_DONT_WAIT_FOR_ACK,
|
||||
|
||||
NL80211_ATTR_FEATURE_FLAGS,
|
||||
|
||||
NL80211_ATTR_PROBE_RESP_OFFLOAD,
|
||||
|
||||
NL80211_ATTR_PROBE_RESP,
|
||||
|
||||
NL80211_ATTR_DFS_REGION,
|
||||
|
||||
NL80211_ATTR_DISABLE_HT,
|
||||
NL80211_ATTR_HT_CAPABILITY_MASK,
|
||||
|
||||
NL80211_ATTR_NOACK_MAP,
|
||||
|
||||
/* add attributes here, update the policy in nl80211.c */
|
||||
|
||||
__NL80211_ATTR_AFTER_LAST,
|
||||
|
|
@ -1371,6 +1472,7 @@ enum nl80211_attrs {
|
|||
#define NL80211_ATTR_AKM_SUITES NL80211_ATTR_AKM_SUITES
|
||||
#define NL80211_ATTR_KEY NL80211_ATTR_KEY
|
||||
#define NL80211_ATTR_KEYS NL80211_ATTR_KEYS
|
||||
#define NL80211_ATTR_FEATURE_FLAGS NL80211_ATTR_FEATURE_FLAGS
|
||||
|
||||
#define NL80211_MAX_SUPP_RATES 32
|
||||
#define NL80211_MAX_SUPP_REG_RULES 32
|
||||
|
|
@ -1434,7 +1536,11 @@ enum nl80211_iftype {
|
|||
* @NL80211_STA_FLAG_WME: station is WME/QoS capable
|
||||
* @NL80211_STA_FLAG_MFP: station uses management frame protection
|
||||
* @NL80211_STA_FLAG_AUTHENTICATED: station is authenticated
|
||||
* @NL80211_STA_FLAG_TDLS_PEER: station is a TDLS peer
|
||||
* @NL80211_STA_FLAG_TDLS_PEER: station is a TDLS peer -- this flag should
|
||||
* only be used in managed mode (even in the flags mask). Note that the
|
||||
* flag can't be changed, it is only valid while adding a station, and
|
||||
* attempts to change it will silently be ignored (rather than rejected
|
||||
* as errors.)
|
||||
* @NL80211_STA_FLAG_MAX: highest station flag number currently defined
|
||||
* @__NL80211_STA_FLAG_AFTER_LAST: internal use
|
||||
*/
|
||||
|
|
@ -1549,6 +1655,7 @@ enum nl80211_sta_bss_param {
|
|||
* containing info as possible, see &enum nl80211_sta_bss_param
|
||||
* @NL80211_STA_INFO_CONNECTED_TIME: time since the station is last connected
|
||||
* @NL80211_STA_INFO_STA_FLAGS: Contains a struct nl80211_sta_flag_update.
|
||||
* @NL80211_STA_INFO_BEACON_LOSS: count of times beacon loss was detected (u32)
|
||||
* @__NL80211_STA_INFO_AFTER_LAST: internal
|
||||
* @NL80211_STA_INFO_MAX: highest possible station info attribute
|
||||
*/
|
||||
|
|
@ -1571,6 +1678,7 @@ enum nl80211_sta_info {
|
|||
NL80211_STA_INFO_BSS_PARAM,
|
||||
NL80211_STA_INFO_CONNECTED_TIME,
|
||||
NL80211_STA_INFO_STA_FLAGS,
|
||||
NL80211_STA_INFO_BEACON_LOSS,
|
||||
|
||||
/* keep last */
|
||||
__NL80211_STA_INFO_AFTER_LAST,
|
||||
|
|
@ -1844,6 +1952,21 @@ enum nl80211_reg_rule_flags {
|
|||
NL80211_RRF_NO_IBSS = 1<<8,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nl80211_dfs_regions - regulatory DFS regions
|
||||
*
|
||||
* @NL80211_DFS_UNSET: Country has no DFS master region specified
|
||||
* @NL80211_DFS_FCC_: Country follows DFS master rules from FCC
|
||||
* @NL80211_DFS_FCC_: Country follows DFS master rules from ETSI
|
||||
* @NL80211_DFS_JP_: Country follows DFS master rules from JP/MKK/Telec
|
||||
*/
|
||||
enum nl80211_dfs_regions {
|
||||
NL80211_DFS_UNSET = 0,
|
||||
NL80211_DFS_FCC = 1,
|
||||
NL80211_DFS_ETSI = 2,
|
||||
NL80211_DFS_JP = 3,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nl80211_survey_info - survey information
|
||||
*
|
||||
|
|
@ -1977,6 +2100,10 @@ enum nl80211_mntr_flags {
|
|||
* access to a broader network beyond the MBSS. This is done via Root
|
||||
* Announcement frames.
|
||||
*
|
||||
* @NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL: The minimum interval of time (in
|
||||
* TUs) during which a mesh STA can send only one Action frame containing a
|
||||
* PERR element.
|
||||
*
|
||||
* @NL80211_MESHCONF_ATTR_MAX: highest possible mesh configuration attribute
|
||||
*
|
||||
* @__NL80211_MESHCONF_ATTR_AFTER_LAST: internal use
|
||||
|
|
@ -2000,6 +2127,7 @@ enum nl80211_meshconf_params {
|
|||
NL80211_MESHCONF_ELEMENT_TTL,
|
||||
NL80211_MESHCONF_HWMP_RANN_INTERVAL,
|
||||
NL80211_MESHCONF_GATE_ANNOUNCEMENTS,
|
||||
NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL,
|
||||
|
||||
/* keep last */
|
||||
__NL80211_MESHCONF_ATTR_AFTER_LAST,
|
||||
|
|
@ -2650,4 +2778,45 @@ enum nl80211_tdls_operation {
|
|||
NL80211_TDLS_DISABLE_LINK,
|
||||
};
|
||||
|
||||
/*
|
||||
* enum nl80211_ap_sme_features - device-integrated AP features
|
||||
* Reserved for future use, no bits are defined in
|
||||
* NL80211_ATTR_DEVICE_AP_SME yet.
|
||||
enum nl80211_ap_sme_features {
|
||||
};
|
||||
*/
|
||||
|
||||
/**
|
||||
* enum nl80211_feature_flags - device/driver features
|
||||
* @NL80211_FEATURE_SK_TX_STATUS: This driver supports reflecting back
|
||||
* TX status to the socket error queue when requested with the
|
||||
* socket option.
|
||||
* @NL80211_FEATURE_HT_IBSS: This driver supports IBSS with HT datarates.
|
||||
*/
|
||||
enum nl80211_feature_flags {
|
||||
NL80211_FEATURE_SK_TX_STATUS = 1 << 0,
|
||||
NL80211_FEATURE_HT_IBSS = 1 << 1,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nl80211_probe_resp_offload_support_attr - optional supported
|
||||
* protocols for probe-response offloading by the driver/FW.
|
||||
* To be used with the %NL80211_ATTR_PROBE_RESP_OFFLOAD attribute.
|
||||
* Each enum value represents a bit in the bitmap of supported
|
||||
* protocols. Typically a subset of probe-requests belonging to a
|
||||
* supported protocol will be excluded from offload and uploaded
|
||||
* to the host.
|
||||
*
|
||||
* @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS: Support for WPS ver. 1
|
||||
* @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2: Support for WPS ver. 2
|
||||
* @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P: Support for P2P
|
||||
* @NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U: Support for 802.11u
|
||||
*/
|
||||
enum nl80211_probe_resp_offload_support_attr {
|
||||
NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS = 1<<0,
|
||||
NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2 = 1<<1,
|
||||
NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P = 1<<2,
|
||||
NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U = 1<<3,
|
||||
};
|
||||
|
||||
#endif /* __LINUX_NL80211_H */
|
||||
|
|
|
|||
452
include/linux/openvswitch.h
Normal file
452
include/linux/openvswitch.h
Normal file
|
|
@ -0,0 +1,452 @@
|
|||
/*
|
||||
* Copyright (c) 2007-2011 Nicira Networks.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of version 2 of the GNU General Public
|
||||
* License as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
* 02110-1301, USA
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_OPENVSWITCH_H
|
||||
#define _LINUX_OPENVSWITCH_H 1
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/**
|
||||
* struct ovs_header - header for OVS Generic Netlink messages.
|
||||
* @dp_ifindex: ifindex of local port for datapath (0 to make a request not
|
||||
* specific to a datapath).
|
||||
*
|
||||
* Attributes following the header are specific to a particular OVS Generic
|
||||
* Netlink family, but all of the OVS families use this header.
|
||||
*/
|
||||
|
||||
struct ovs_header {
|
||||
int dp_ifindex;
|
||||
};
|
||||
|
||||
/* Datapaths. */
|
||||
|
||||
#define OVS_DATAPATH_FAMILY "ovs_datapath"
|
||||
#define OVS_DATAPATH_MCGROUP "ovs_datapath"
|
||||
#define OVS_DATAPATH_VERSION 0x1
|
||||
|
||||
enum ovs_datapath_cmd {
|
||||
OVS_DP_CMD_UNSPEC,
|
||||
OVS_DP_CMD_NEW,
|
||||
OVS_DP_CMD_DEL,
|
||||
OVS_DP_CMD_GET,
|
||||
OVS_DP_CMD_SET
|
||||
};
|
||||
|
||||
/**
|
||||
* enum ovs_datapath_attr - attributes for %OVS_DP_* commands.
|
||||
* @OVS_DP_ATTR_NAME: Name of the network device that serves as the "local
|
||||
* port". This is the name of the network device whose dp_ifindex is given in
|
||||
* the &struct ovs_header. Always present in notifications. Required in
|
||||
* %OVS_DP_NEW requests. May be used as an alternative to specifying
|
||||
* dp_ifindex in other requests (with a dp_ifindex of 0).
|
||||
* @OVS_DP_ATTR_UPCALL_PID: The Netlink socket in userspace that is initially
|
||||
* set on the datapath port (for OVS_ACTION_ATTR_MISS). Only valid on
|
||||
* %OVS_DP_CMD_NEW requests. A value of zero indicates that upcalls should
|
||||
* not be sent.
|
||||
* @OVS_DP_ATTR_STATS: Statistics about packets that have passed through the
|
||||
* datapath. Always present in notifications.
|
||||
*
|
||||
* These attributes follow the &struct ovs_header within the Generic Netlink
|
||||
* payload for %OVS_DP_* commands.
|
||||
*/
|
||||
enum ovs_datapath_attr {
|
||||
OVS_DP_ATTR_UNSPEC,
|
||||
OVS_DP_ATTR_NAME, /* name of dp_ifindex netdev */
|
||||
OVS_DP_ATTR_UPCALL_PID, /* Netlink PID to receive upcalls */
|
||||
OVS_DP_ATTR_STATS, /* struct ovs_dp_stats */
|
||||
__OVS_DP_ATTR_MAX
|
||||
};
|
||||
|
||||
#define OVS_DP_ATTR_MAX (__OVS_DP_ATTR_MAX - 1)
|
||||
|
||||
struct ovs_dp_stats {
|
||||
__u64 n_hit; /* Number of flow table matches. */
|
||||
__u64 n_missed; /* Number of flow table misses. */
|
||||
__u64 n_lost; /* Number of misses not sent to userspace. */
|
||||
__u64 n_flows; /* Number of flows present */
|
||||
};
|
||||
|
||||
struct ovs_vport_stats {
|
||||
__u64 rx_packets; /* total packets received */
|
||||
__u64 tx_packets; /* total packets transmitted */
|
||||
__u64 rx_bytes; /* total bytes received */
|
||||
__u64 tx_bytes; /* total bytes transmitted */
|
||||
__u64 rx_errors; /* bad packets received */
|
||||
__u64 tx_errors; /* packet transmit problems */
|
||||
__u64 rx_dropped; /* no space in linux buffers */
|
||||
__u64 tx_dropped; /* no space available in linux */
|
||||
};
|
||||
|
||||
/* Fixed logical ports. */
|
||||
#define OVSP_LOCAL ((__u16)0)
|
||||
|
||||
/* Packet transfer. */
|
||||
|
||||
#define OVS_PACKET_FAMILY "ovs_packet"
|
||||
#define OVS_PACKET_VERSION 0x1
|
||||
|
||||
enum ovs_packet_cmd {
|
||||
OVS_PACKET_CMD_UNSPEC,
|
||||
|
||||
/* Kernel-to-user notifications. */
|
||||
OVS_PACKET_CMD_MISS, /* Flow table miss. */
|
||||
OVS_PACKET_CMD_ACTION, /* OVS_ACTION_ATTR_USERSPACE action. */
|
||||
|
||||
/* Userspace commands. */
|
||||
OVS_PACKET_CMD_EXECUTE /* Apply actions to a packet. */
|
||||
};
|
||||
|
||||
/**
|
||||
* enum ovs_packet_attr - attributes for %OVS_PACKET_* commands.
|
||||
* @OVS_PACKET_ATTR_PACKET: Present for all notifications. Contains the entire
|
||||
* packet as received, from the start of the Ethernet header onward. For
|
||||
* %OVS_PACKET_CMD_ACTION, %OVS_PACKET_ATTR_PACKET reflects changes made by
|
||||
* actions preceding %OVS_ACTION_ATTR_USERSPACE, but %OVS_PACKET_ATTR_KEY is
|
||||
* the flow key extracted from the packet as originally received.
|
||||
* @OVS_PACKET_ATTR_KEY: Present for all notifications. Contains the flow key
|
||||
* extracted from the packet as nested %OVS_KEY_ATTR_* attributes. This allows
|
||||
* userspace to adapt its flow setup strategy by comparing its notion of the
|
||||
* flow key against the kernel's.
|
||||
* @OVS_PACKET_ATTR_ACTIONS: Contains actions for the packet. Used
|
||||
* for %OVS_PACKET_CMD_EXECUTE. It has nested %OVS_ACTION_ATTR_* attributes.
|
||||
* @OVS_PACKET_ATTR_USERDATA: Present for an %OVS_PACKET_CMD_ACTION
|
||||
* notification if the %OVS_ACTION_ATTR_USERSPACE action specified an
|
||||
* %OVS_USERSPACE_ATTR_USERDATA attribute.
|
||||
*
|
||||
* These attributes follow the &struct ovs_header within the Generic Netlink
|
||||
* payload for %OVS_PACKET_* commands.
|
||||
*/
|
||||
enum ovs_packet_attr {
|
||||
OVS_PACKET_ATTR_UNSPEC,
|
||||
OVS_PACKET_ATTR_PACKET, /* Packet data. */
|
||||
OVS_PACKET_ATTR_KEY, /* Nested OVS_KEY_ATTR_* attributes. */
|
||||
OVS_PACKET_ATTR_ACTIONS, /* Nested OVS_ACTION_ATTR_* attributes. */
|
||||
OVS_PACKET_ATTR_USERDATA, /* u64 OVS_ACTION_ATTR_USERSPACE arg. */
|
||||
__OVS_PACKET_ATTR_MAX
|
||||
};
|
||||
|
||||
#define OVS_PACKET_ATTR_MAX (__OVS_PACKET_ATTR_MAX - 1)
|
||||
|
||||
/* Virtual ports. */
|
||||
|
||||
#define OVS_VPORT_FAMILY "ovs_vport"
|
||||
#define OVS_VPORT_MCGROUP "ovs_vport"
|
||||
#define OVS_VPORT_VERSION 0x1
|
||||
|
||||
enum ovs_vport_cmd {
|
||||
OVS_VPORT_CMD_UNSPEC,
|
||||
OVS_VPORT_CMD_NEW,
|
||||
OVS_VPORT_CMD_DEL,
|
||||
OVS_VPORT_CMD_GET,
|
||||
OVS_VPORT_CMD_SET
|
||||
};
|
||||
|
||||
enum ovs_vport_type {
|
||||
OVS_VPORT_TYPE_UNSPEC,
|
||||
OVS_VPORT_TYPE_NETDEV, /* network device */
|
||||
OVS_VPORT_TYPE_INTERNAL, /* network device implemented by datapath */
|
||||
__OVS_VPORT_TYPE_MAX
|
||||
};
|
||||
|
||||
#define OVS_VPORT_TYPE_MAX (__OVS_VPORT_TYPE_MAX - 1)
|
||||
|
||||
/**
|
||||
* enum ovs_vport_attr - attributes for %OVS_VPORT_* commands.
|
||||
* @OVS_VPORT_ATTR_PORT_NO: 32-bit port number within datapath.
|
||||
* @OVS_VPORT_ATTR_TYPE: 32-bit %OVS_VPORT_TYPE_* constant describing the type
|
||||
* of vport.
|
||||
* @OVS_VPORT_ATTR_NAME: Name of vport. For a vport based on a network device
|
||||
* this is the name of the network device. Maximum length %IFNAMSIZ-1 bytes
|
||||
* plus a null terminator.
|
||||
* @OVS_VPORT_ATTR_OPTIONS: Vport-specific configuration information.
|
||||
* @OVS_VPORT_ATTR_UPCALL_PID: The Netlink socket in userspace that
|
||||
* OVS_PACKET_CMD_MISS upcalls will be directed to for packets received on
|
||||
* this port. A value of zero indicates that upcalls should not be sent.
|
||||
* @OVS_VPORT_ATTR_STATS: A &struct ovs_vport_stats giving statistics for
|
||||
* packets sent or received through the vport.
|
||||
*
|
||||
* These attributes follow the &struct ovs_header within the Generic Netlink
|
||||
* payload for %OVS_VPORT_* commands.
|
||||
*
|
||||
* For %OVS_VPORT_CMD_NEW requests, the %OVS_VPORT_ATTR_TYPE and
|
||||
* %OVS_VPORT_ATTR_NAME attributes are required. %OVS_VPORT_ATTR_PORT_NO is
|
||||
* optional; if not specified a free port number is automatically selected.
|
||||
* Whether %OVS_VPORT_ATTR_OPTIONS is required or optional depends on the type
|
||||
* of vport.
|
||||
* and other attributes are ignored.
|
||||
*
|
||||
* For other requests, if %OVS_VPORT_ATTR_NAME is specified then it is used to
|
||||
* look up the vport to operate on; otherwise dp_idx from the &struct
|
||||
* ovs_header plus %OVS_VPORT_ATTR_PORT_NO determine the vport.
|
||||
*/
|
||||
enum ovs_vport_attr {
|
||||
OVS_VPORT_ATTR_UNSPEC,
|
||||
OVS_VPORT_ATTR_PORT_NO, /* u32 port number within datapath */
|
||||
OVS_VPORT_ATTR_TYPE, /* u32 OVS_VPORT_TYPE_* constant. */
|
||||
OVS_VPORT_ATTR_NAME, /* string name, up to IFNAMSIZ bytes long */
|
||||
OVS_VPORT_ATTR_OPTIONS, /* nested attributes, varies by vport type */
|
||||
OVS_VPORT_ATTR_UPCALL_PID, /* u32 Netlink PID to receive upcalls */
|
||||
OVS_VPORT_ATTR_STATS, /* struct ovs_vport_stats */
|
||||
__OVS_VPORT_ATTR_MAX
|
||||
};
|
||||
|
||||
#define OVS_VPORT_ATTR_MAX (__OVS_VPORT_ATTR_MAX - 1)
|
||||
|
||||
/* Flows. */
|
||||
|
||||
#define OVS_FLOW_FAMILY "ovs_flow"
|
||||
#define OVS_FLOW_MCGROUP "ovs_flow"
|
||||
#define OVS_FLOW_VERSION 0x1
|
||||
|
||||
enum ovs_flow_cmd {
|
||||
OVS_FLOW_CMD_UNSPEC,
|
||||
OVS_FLOW_CMD_NEW,
|
||||
OVS_FLOW_CMD_DEL,
|
||||
OVS_FLOW_CMD_GET,
|
||||
OVS_FLOW_CMD_SET
|
||||
};
|
||||
|
||||
struct ovs_flow_stats {
|
||||
__u64 n_packets; /* Number of matched packets. */
|
||||
__u64 n_bytes; /* Number of matched bytes. */
|
||||
};
|
||||
|
||||
enum ovs_key_attr {
|
||||
OVS_KEY_ATTR_UNSPEC,
|
||||
OVS_KEY_ATTR_ENCAP, /* Nested set of encapsulated attributes. */
|
||||
OVS_KEY_ATTR_PRIORITY, /* u32 skb->priority */
|
||||
OVS_KEY_ATTR_IN_PORT, /* u32 OVS dp port number */
|
||||
OVS_KEY_ATTR_ETHERNET, /* struct ovs_key_ethernet */
|
||||
OVS_KEY_ATTR_VLAN, /* be16 VLAN TCI */
|
||||
OVS_KEY_ATTR_ETHERTYPE, /* be16 Ethernet type */
|
||||
OVS_KEY_ATTR_IPV4, /* struct ovs_key_ipv4 */
|
||||
OVS_KEY_ATTR_IPV6, /* struct ovs_key_ipv6 */
|
||||
OVS_KEY_ATTR_TCP, /* struct ovs_key_tcp */
|
||||
OVS_KEY_ATTR_UDP, /* struct ovs_key_udp */
|
||||
OVS_KEY_ATTR_ICMP, /* struct ovs_key_icmp */
|
||||
OVS_KEY_ATTR_ICMPV6, /* struct ovs_key_icmpv6 */
|
||||
OVS_KEY_ATTR_ARP, /* struct ovs_key_arp */
|
||||
OVS_KEY_ATTR_ND, /* struct ovs_key_nd */
|
||||
__OVS_KEY_ATTR_MAX
|
||||
};
|
||||
|
||||
#define OVS_KEY_ATTR_MAX (__OVS_KEY_ATTR_MAX - 1)
|
||||
|
||||
/**
|
||||
* enum ovs_frag_type - IPv4 and IPv6 fragment type
|
||||
* @OVS_FRAG_TYPE_NONE: Packet is not a fragment.
|
||||
* @OVS_FRAG_TYPE_FIRST: Packet is a fragment with offset 0.
|
||||
* @OVS_FRAG_TYPE_LATER: Packet is a fragment with nonzero offset.
|
||||
*
|
||||
* Used as the @ipv4_frag in &struct ovs_key_ipv4 and as @ipv6_frag &struct
|
||||
* ovs_key_ipv6.
|
||||
*/
|
||||
enum ovs_frag_type {
|
||||
OVS_FRAG_TYPE_NONE,
|
||||
OVS_FRAG_TYPE_FIRST,
|
||||
OVS_FRAG_TYPE_LATER,
|
||||
__OVS_FRAG_TYPE_MAX
|
||||
};
|
||||
|
||||
#define OVS_FRAG_TYPE_MAX (__OVS_FRAG_TYPE_MAX - 1)
|
||||
|
||||
struct ovs_key_ethernet {
|
||||
__u8 eth_src[6];
|
||||
__u8 eth_dst[6];
|
||||
};
|
||||
|
||||
struct ovs_key_ipv4 {
|
||||
__be32 ipv4_src;
|
||||
__be32 ipv4_dst;
|
||||
__u8 ipv4_proto;
|
||||
__u8 ipv4_tos;
|
||||
__u8 ipv4_ttl;
|
||||
__u8 ipv4_frag; /* One of OVS_FRAG_TYPE_*. */
|
||||
};
|
||||
|
||||
struct ovs_key_ipv6 {
|
||||
__be32 ipv6_src[4];
|
||||
__be32 ipv6_dst[4];
|
||||
__be32 ipv6_label; /* 20-bits in least-significant bits. */
|
||||
__u8 ipv6_proto;
|
||||
__u8 ipv6_tclass;
|
||||
__u8 ipv6_hlimit;
|
||||
__u8 ipv6_frag; /* One of OVS_FRAG_TYPE_*. */
|
||||
};
|
||||
|
||||
struct ovs_key_tcp {
|
||||
__be16 tcp_src;
|
||||
__be16 tcp_dst;
|
||||
};
|
||||
|
||||
struct ovs_key_udp {
|
||||
__be16 udp_src;
|
||||
__be16 udp_dst;
|
||||
};
|
||||
|
||||
struct ovs_key_icmp {
|
||||
__u8 icmp_type;
|
||||
__u8 icmp_code;
|
||||
};
|
||||
|
||||
struct ovs_key_icmpv6 {
|
||||
__u8 icmpv6_type;
|
||||
__u8 icmpv6_code;
|
||||
};
|
||||
|
||||
struct ovs_key_arp {
|
||||
__be32 arp_sip;
|
||||
__be32 arp_tip;
|
||||
__be16 arp_op;
|
||||
__u8 arp_sha[6];
|
||||
__u8 arp_tha[6];
|
||||
};
|
||||
|
||||
struct ovs_key_nd {
|
||||
__u32 nd_target[4];
|
||||
__u8 nd_sll[6];
|
||||
__u8 nd_tll[6];
|
||||
};
|
||||
|
||||
/**
|
||||
* enum ovs_flow_attr - attributes for %OVS_FLOW_* commands.
|
||||
* @OVS_FLOW_ATTR_KEY: Nested %OVS_KEY_ATTR_* attributes specifying the flow
|
||||
* key. Always present in notifications. Required for all requests (except
|
||||
* dumps).
|
||||
* @OVS_FLOW_ATTR_ACTIONS: Nested %OVS_ACTION_ATTR_* attributes specifying
|
||||
* the actions to take for packets that match the key. Always present in
|
||||
* notifications. Required for %OVS_FLOW_CMD_NEW requests, optional for
|
||||
* %OVS_FLOW_CMD_SET requests.
|
||||
* @OVS_FLOW_ATTR_STATS: &struct ovs_flow_stats giving statistics for this
|
||||
* flow. Present in notifications if the stats would be nonzero. Ignored in
|
||||
* requests.
|
||||
* @OVS_FLOW_ATTR_TCP_FLAGS: An 8-bit value giving the OR'd value of all of the
|
||||
* TCP flags seen on packets in this flow. Only present in notifications for
|
||||
* TCP flows, and only if it would be nonzero. Ignored in requests.
|
||||
* @OVS_FLOW_ATTR_USED: A 64-bit integer giving the time, in milliseconds on
|
||||
* the system monotonic clock, at which a packet was last processed for this
|
||||
* flow. Only present in notifications if a packet has been processed for this
|
||||
* flow. Ignored in requests.
|
||||
* @OVS_FLOW_ATTR_CLEAR: If present in a %OVS_FLOW_CMD_SET request, clears the
|
||||
* last-used time, accumulated TCP flags, and statistics for this flow.
|
||||
* Otherwise ignored in requests. Never present in notifications.
|
||||
*
|
||||
* These attributes follow the &struct ovs_header within the Generic Netlink
|
||||
* payload for %OVS_FLOW_* commands.
|
||||
*/
|
||||
enum ovs_flow_attr {
|
||||
OVS_FLOW_ATTR_UNSPEC,
|
||||
OVS_FLOW_ATTR_KEY, /* Sequence of OVS_KEY_ATTR_* attributes. */
|
||||
OVS_FLOW_ATTR_ACTIONS, /* Nested OVS_ACTION_ATTR_* attributes. */
|
||||
OVS_FLOW_ATTR_STATS, /* struct ovs_flow_stats. */
|
||||
OVS_FLOW_ATTR_TCP_FLAGS, /* 8-bit OR'd TCP flags. */
|
||||
OVS_FLOW_ATTR_USED, /* u64 msecs last used in monotonic time. */
|
||||
OVS_FLOW_ATTR_CLEAR, /* Flag to clear stats, tcp_flags, used. */
|
||||
__OVS_FLOW_ATTR_MAX
|
||||
};
|
||||
|
||||
#define OVS_FLOW_ATTR_MAX (__OVS_FLOW_ATTR_MAX - 1)
|
||||
|
||||
/**
|
||||
* enum ovs_sample_attr - Attributes for %OVS_ACTION_ATTR_SAMPLE action.
|
||||
* @OVS_SAMPLE_ATTR_PROBABILITY: 32-bit fraction of packets to sample with
|
||||
* @OVS_ACTION_ATTR_SAMPLE. A value of 0 samples no packets, a value of
|
||||
* %UINT32_MAX samples all packets and intermediate values sample intermediate
|
||||
* fractions of packets.
|
||||
* @OVS_SAMPLE_ATTR_ACTIONS: Set of actions to execute in sampling event.
|
||||
* Actions are passed as nested attributes.
|
||||
*
|
||||
* Executes the specified actions with the given probability on a per-packet
|
||||
* basis.
|
||||
*/
|
||||
enum ovs_sample_attr {
|
||||
OVS_SAMPLE_ATTR_UNSPEC,
|
||||
OVS_SAMPLE_ATTR_PROBABILITY, /* u32 number */
|
||||
OVS_SAMPLE_ATTR_ACTIONS, /* Nested OVS_ACTION_ATTR_* attributes. */
|
||||
__OVS_SAMPLE_ATTR_MAX,
|
||||
};
|
||||
|
||||
#define OVS_SAMPLE_ATTR_MAX (__OVS_SAMPLE_ATTR_MAX - 1)
|
||||
|
||||
/**
|
||||
* enum ovs_userspace_attr - Attributes for %OVS_ACTION_ATTR_USERSPACE action.
|
||||
* @OVS_USERSPACE_ATTR_PID: u32 Netlink PID to which the %OVS_PACKET_CMD_ACTION
|
||||
* message should be sent. Required.
|
||||
* @OVS_USERSPACE_ATTR_USERDATA: If present, its u64 argument is copied to the
|
||||
* %OVS_PACKET_CMD_ACTION message as %OVS_PACKET_ATTR_USERDATA,
|
||||
*/
|
||||
enum ovs_userspace_attr {
|
||||
OVS_USERSPACE_ATTR_UNSPEC,
|
||||
OVS_USERSPACE_ATTR_PID, /* u32 Netlink PID to receive upcalls. */
|
||||
OVS_USERSPACE_ATTR_USERDATA, /* u64 optional user-specified cookie. */
|
||||
__OVS_USERSPACE_ATTR_MAX
|
||||
};
|
||||
|
||||
#define OVS_USERSPACE_ATTR_MAX (__OVS_USERSPACE_ATTR_MAX - 1)
|
||||
|
||||
/**
|
||||
* struct ovs_action_push_vlan - %OVS_ACTION_ATTR_PUSH_VLAN action argument.
|
||||
* @vlan_tpid: Tag protocol identifier (TPID) to push.
|
||||
* @vlan_tci: Tag control identifier (TCI) to push. The CFI bit must be set
|
||||
* (but it will not be set in the 802.1Q header that is pushed).
|
||||
*
|
||||
* The @vlan_tpid value is typically %ETH_P_8021Q. The only acceptable TPID
|
||||
* values are those that the kernel module also parses as 802.1Q headers, to
|
||||
* prevent %OVS_ACTION_ATTR_PUSH_VLAN followed by %OVS_ACTION_ATTR_POP_VLAN
|
||||
* from having surprising results.
|
||||
*/
|
||||
struct ovs_action_push_vlan {
|
||||
__be16 vlan_tpid; /* 802.1Q TPID. */
|
||||
__be16 vlan_tci; /* 802.1Q TCI (VLAN ID and priority). */
|
||||
};
|
||||
|
||||
/**
|
||||
* enum ovs_action_attr - Action types.
|
||||
*
|
||||
* @OVS_ACTION_ATTR_OUTPUT: Output packet to port.
|
||||
* @OVS_ACTION_ATTR_USERSPACE: Send packet to userspace according to nested
|
||||
* %OVS_USERSPACE_ATTR_* attributes.
|
||||
* @OVS_ACTION_ATTR_SET: Replaces the contents of an existing header. The
|
||||
* single nested %OVS_KEY_ATTR_* attribute specifies a header to modify and its
|
||||
* value.
|
||||
* @OVS_ACTION_ATTR_PUSH_VLAN: Push a new outermost 802.1Q header onto the
|
||||
* packet.
|
||||
* @OVS_ACTION_ATTR_POP_VLAN: Pop the outermost 802.1Q header off the packet.
|
||||
* @OVS_ACTION_ATTR_SAMPLE: Probabilitically executes actions, as specified in
|
||||
* the nested %OVS_SAMPLE_ATTR_* attributes.
|
||||
*
|
||||
* Only a single header can be set with a single %OVS_ACTION_ATTR_SET. Not all
|
||||
* fields within a header are modifiable, e.g. the IPv4 protocol and fragment
|
||||
* type may not be changed.
|
||||
*/
|
||||
|
||||
enum ovs_action_attr {
|
||||
OVS_ACTION_ATTR_UNSPEC,
|
||||
OVS_ACTION_ATTR_OUTPUT, /* u32 port number. */
|
||||
OVS_ACTION_ATTR_USERSPACE, /* Nested OVS_USERSPACE_ATTR_*. */
|
||||
OVS_ACTION_ATTR_SET, /* One nested OVS_KEY_ATTR_*. */
|
||||
OVS_ACTION_ATTR_PUSH_VLAN, /* struct ovs_action_push_vlan. */
|
||||
OVS_ACTION_ATTR_POP_VLAN, /* No argument. */
|
||||
OVS_ACTION_ATTR_SAMPLE, /* Nested OVS_SAMPLE_ATTR_*. */
|
||||
__OVS_ACTION_ATTR_MAX
|
||||
};
|
||||
|
||||
#define OVS_ACTION_ATTR_MAX (__OVS_ACTION_ATTR_MAX - 1)
|
||||
|
||||
#endif /* _LINUX_OPENVSWITCH_H */
|
||||
|
|
@ -38,6 +38,7 @@
|
|||
#define PNPIPE_ENCAP 1
|
||||
#define PNPIPE_IFINDEX 2
|
||||
#define PNPIPE_HANDLE 3
|
||||
#define PNPIPE_INITSTATE 4
|
||||
|
||||
#define PNADDR_ANY 0
|
||||
#define PNADDR_BROADCAST 0xFC
|
||||
|
|
@ -49,6 +50,7 @@
|
|||
|
||||
/* ioctls */
|
||||
#define SIOCPNGETOBJECT (SIOCPROTOPRIVATE + 0)
|
||||
#define SIOCPNENABLEPIPE (SIOCPROTOPRIVATE + 13)
|
||||
#define SIOCPNADDRESOURCE (SIOCPROTOPRIVATE + 14)
|
||||
#define SIOCPNDELRESOURCE (SIOCPROTOPRIVATE + 15)
|
||||
|
||||
|
|
|
|||
|
|
@ -162,25 +162,24 @@ struct tc_sfq_qopt {
|
|||
unsigned flows; /* Maximal number of flows */
|
||||
};
|
||||
|
||||
struct tc_sfq_qopt_v1 {
|
||||
struct tc_sfq_qopt v0;
|
||||
unsigned int depth; /* max number of packets per flow */
|
||||
unsigned int headdrop;
|
||||
};
|
||||
|
||||
|
||||
struct tc_sfq_xstats {
|
||||
__s32 allot;
|
||||
};
|
||||
|
||||
/*
|
||||
* NOTE: limit, divisor and flows are hardwired to code at the moment.
|
||||
*
|
||||
* limit=flows=128, divisor=1024;
|
||||
*
|
||||
* The only reason for this is efficiency, it is possible
|
||||
* to change these parameters in compile time.
|
||||
*/
|
||||
|
||||
/* RED section */
|
||||
|
||||
enum {
|
||||
TCA_RED_UNSPEC,
|
||||
TCA_RED_PARMS,
|
||||
TCA_RED_STAB,
|
||||
TCA_RED_MAX_P,
|
||||
__TCA_RED_MAX,
|
||||
};
|
||||
|
||||
|
|
@ -194,8 +193,9 @@ struct tc_red_qopt {
|
|||
unsigned char Plog; /* log(P_max/(qth_max-qth_min)) */
|
||||
unsigned char Scell_log; /* cell size for idle damping */
|
||||
unsigned char flags;
|
||||
#define TC_RED_ECN 1
|
||||
#define TC_RED_HARDDROP 2
|
||||
#define TC_RED_ECN 1
|
||||
#define TC_RED_HARDDROP 2
|
||||
#define TC_RED_ADAPTATIVE 4
|
||||
};
|
||||
|
||||
struct tc_red_xstats {
|
||||
|
|
@ -214,6 +214,7 @@ enum {
|
|||
TCA_GRED_PARMS,
|
||||
TCA_GRED_STAB,
|
||||
TCA_GRED_DPS,
|
||||
TCA_GRED_MAX_P,
|
||||
__TCA_GRED_MAX,
|
||||
};
|
||||
|
||||
|
|
@ -253,6 +254,7 @@ enum {
|
|||
TCA_CHOKE_UNSPEC,
|
||||
TCA_CHOKE_PARMS,
|
||||
TCA_CHOKE_STAB,
|
||||
TCA_CHOKE_MAX_P,
|
||||
__TCA_CHOKE_MAX,
|
||||
};
|
||||
|
||||
|
|
@ -465,6 +467,7 @@ enum {
|
|||
TCA_NETEM_REORDER,
|
||||
TCA_NETEM_CORRUPT,
|
||||
TCA_NETEM_LOSS,
|
||||
TCA_NETEM_RATE,
|
||||
__TCA_NETEM_MAX,
|
||||
};
|
||||
|
||||
|
|
@ -495,6 +498,13 @@ struct tc_netem_corrupt {
|
|||
__u32 correlation;
|
||||
};
|
||||
|
||||
struct tc_netem_rate {
|
||||
__u32 rate; /* byte/s */
|
||||
__s32 packet_overhead;
|
||||
__u32 cell_size;
|
||||
__s32 cell_overhead;
|
||||
};
|
||||
|
||||
enum {
|
||||
NETEM_LOSS_UNSPEC,
|
||||
NETEM_LOSS_GI, /* General Intuitive - 4 state model */
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@
|
|||
#include <linux/dmaengine.h>
|
||||
#include <linux/hrtimer.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/netdev_features.h>
|
||||
|
||||
/* Don't change this without changing skb_csum_unnecessary! */
|
||||
#define CHECKSUM_NONE 0
|
||||
|
|
@ -87,7 +88,6 @@
|
|||
* at device setup time.
|
||||
* NETIF_F_HW_CSUM - it is clever device, it is able to checksum
|
||||
* everything.
|
||||
* NETIF_F_NO_CSUM - loopback or reliable single hop media.
|
||||
* NETIF_F_IP_CSUM - device is dumb. It is able to csum only
|
||||
* TCP/UDP over IPv4. Sigh. Vendors like this
|
||||
* way by an unknown reason. Though, see comment above
|
||||
|
|
@ -128,13 +128,17 @@ struct sk_buff_head {
|
|||
|
||||
struct sk_buff;
|
||||
|
||||
/* To allow 64K frame to be packed as single skb without frag_list. Since
|
||||
* GRO uses frags we allocate at least 16 regardless of page size.
|
||||
/* To allow 64K frame to be packed as single skb without frag_list we
|
||||
* require 64K/PAGE_SIZE pages plus 1 additional page to allow for
|
||||
* buffers which do not start on a page boundary.
|
||||
*
|
||||
* Since GRO uses frags we allocate at least 16 regardless of page
|
||||
* size.
|
||||
*/
|
||||
#if (65536/PAGE_SIZE + 2) < 16
|
||||
#if (65536/PAGE_SIZE + 1) < 16
|
||||
#define MAX_SKB_FRAGS 16UL
|
||||
#else
|
||||
#define MAX_SKB_FRAGS (65536/PAGE_SIZE + 2)
|
||||
#define MAX_SKB_FRAGS (65536/PAGE_SIZE + 1)
|
||||
#endif
|
||||
|
||||
typedef struct skb_frag_struct skb_frag_t;
|
||||
|
|
@ -218,6 +222,9 @@ enum {
|
|||
|
||||
/* device driver supports TX zero-copy buffers */
|
||||
SKBTX_DEV_ZEROCOPY = 1 << 4,
|
||||
|
||||
/* generate wifi status information (where possible) */
|
||||
SKBTX_WIFI_STATUS = 1 << 5,
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -235,15 +242,15 @@ struct ubuf_info {
|
|||
* the end of the header data, ie. at skb->end.
|
||||
*/
|
||||
struct skb_shared_info {
|
||||
unsigned short nr_frags;
|
||||
unsigned char nr_frags;
|
||||
__u8 tx_flags;
|
||||
unsigned short gso_size;
|
||||
/* Warning: this field is not always filled in (UFO)! */
|
||||
unsigned short gso_segs;
|
||||
unsigned short gso_type;
|
||||
__be32 ip6_frag_id;
|
||||
__u8 tx_flags;
|
||||
struct sk_buff *frag_list;
|
||||
struct skb_shared_hwtstamps hwtstamps;
|
||||
__be32 ip6_frag_id;
|
||||
|
||||
/*
|
||||
* Warning : all fields before dataref are cleared in __alloc_skb()
|
||||
|
|
@ -352,6 +359,8 @@ typedef unsigned char *sk_buff_data_t;
|
|||
* @ooo_okay: allow the mapping of a socket to a queue to be changed
|
||||
* @l4_rxhash: indicate rxhash is a canonical 4-tuple hash over transport
|
||||
* ports.
|
||||
* @wifi_acked_valid: wifi_acked was set
|
||||
* @wifi_acked: whether frame was acked on wifi or not
|
||||
* @dma_cookie: a cookie to one of several possible DMA operations
|
||||
* done by skb DMA functions
|
||||
* @secmark: security marking
|
||||
|
|
@ -445,10 +454,11 @@ struct sk_buff {
|
|||
#endif
|
||||
__u8 ooo_okay:1;
|
||||
__u8 l4_rxhash:1;
|
||||
__u8 wifi_acked_valid:1;
|
||||
__u8 wifi_acked:1;
|
||||
/* 10/12 bit hole (depending on ndisc_nodetype presence) */
|
||||
kmemcheck_bitfield_end(flags2);
|
||||
|
||||
/* 0/13 bit hole */
|
||||
|
||||
#ifdef CONFIG_NET_DMA
|
||||
dma_cookie_t dma_cookie;
|
||||
#endif
|
||||
|
|
@ -540,6 +550,7 @@ extern void consume_skb(struct sk_buff *skb);
|
|||
extern void __kfree_skb(struct sk_buff *skb);
|
||||
extern struct sk_buff *__alloc_skb(unsigned int size,
|
||||
gfp_t priority, int fclone, int node);
|
||||
extern struct sk_buff *build_skb(void *data);
|
||||
static inline struct sk_buff *alloc_skb(unsigned int size,
|
||||
gfp_t priority)
|
||||
{
|
||||
|
|
@ -561,8 +572,9 @@ extern struct sk_buff *skb_clone(struct sk_buff *skb,
|
|||
gfp_t priority);
|
||||
extern struct sk_buff *skb_copy(const struct sk_buff *skb,
|
||||
gfp_t priority);
|
||||
extern struct sk_buff *pskb_copy(struct sk_buff *skb,
|
||||
gfp_t gfp_mask);
|
||||
extern struct sk_buff *__pskb_copy(struct sk_buff *skb,
|
||||
int headroom, gfp_t gfp_mask);
|
||||
|
||||
extern int pskb_expand_head(struct sk_buff *skb,
|
||||
int nhead, int ntail,
|
||||
gfp_t gfp_mask);
|
||||
|
|
@ -1661,38 +1673,6 @@ static inline struct sk_buff *netdev_alloc_skb_ip_align(struct net_device *dev,
|
|||
return __netdev_alloc_skb_ip_align(dev, length, GFP_ATOMIC);
|
||||
}
|
||||
|
||||
/**
|
||||
* __netdev_alloc_page - allocate a page for ps-rx on a specific device
|
||||
* @dev: network device to receive on
|
||||
* @gfp_mask: alloc_pages_node mask
|
||||
*
|
||||
* Allocate a new page. dev currently unused.
|
||||
*
|
||||
* %NULL is returned if there is no free memory.
|
||||
*/
|
||||
static inline struct page *__netdev_alloc_page(struct net_device *dev, gfp_t gfp_mask)
|
||||
{
|
||||
return alloc_pages_node(NUMA_NO_NODE, gfp_mask, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* netdev_alloc_page - allocate a page for ps-rx on a specific device
|
||||
* @dev: network device to receive on
|
||||
*
|
||||
* Allocate a new page. dev currently unused.
|
||||
*
|
||||
* %NULL is returned if there is no free memory.
|
||||
*/
|
||||
static inline struct page *netdev_alloc_page(struct net_device *dev)
|
||||
{
|
||||
return __netdev_alloc_page(dev, GFP_ATOMIC);
|
||||
}
|
||||
|
||||
static inline void netdev_free_page(struct net_device *dev, struct page *page)
|
||||
{
|
||||
__free_page(page);
|
||||
}
|
||||
|
||||
/**
|
||||
* skb_frag_page - retrieve the page refered to by a paged fragment
|
||||
* @frag: the paged fragment
|
||||
|
|
@ -1824,6 +1804,12 @@ static inline dma_addr_t skb_frag_dma_map(struct device *dev,
|
|||
frag->page_offset + offset, size, dir);
|
||||
}
|
||||
|
||||
static inline struct sk_buff *pskb_copy(struct sk_buff *skb,
|
||||
gfp_t gfp_mask)
|
||||
{
|
||||
return __pskb_copy(skb, skb_headroom(skb), gfp_mask);
|
||||
}
|
||||
|
||||
/**
|
||||
* skb_clone_writable - is the header of a clone writable
|
||||
* @skb: buffer to check
|
||||
|
|
@ -2105,7 +2091,8 @@ 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, u32 features);
|
||||
extern struct sk_buff *skb_segment(struct sk_buff *skb,
|
||||
netdev_features_t features);
|
||||
|
||||
static inline void *skb_header_pointer(const struct sk_buff *skb, int offset,
|
||||
int len, void *buffer)
|
||||
|
|
@ -2263,6 +2250,15 @@ static inline void skb_tx_timestamp(struct sk_buff *skb)
|
|||
sw_tx_timestamp(skb);
|
||||
}
|
||||
|
||||
/**
|
||||
* skb_complete_wifi_ack - deliver skb with wifi status
|
||||
*
|
||||
* @skb: the original outgoing packet
|
||||
* @acked: ack status
|
||||
*
|
||||
*/
|
||||
void skb_complete_wifi_ack(struct sk_buff *skb, bool acked);
|
||||
|
||||
extern __sum16 __skb_checksum_complete_head(struct sk_buff *skb, int len);
|
||||
extern __sum16 __skb_checksum_complete(struct sk_buff *skb);
|
||||
|
||||
|
|
|
|||
25
include/linux/smscphy.h
Normal file
25
include/linux/smscphy.h
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
#ifndef __LINUX_SMSCPHY_H__
|
||||
#define __LINUX_SMSCPHY_H__
|
||||
|
||||
#define MII_LAN83C185_ISF 29 /* Interrupt Source Flags */
|
||||
#define MII_LAN83C185_IM 30 /* Interrupt Mask */
|
||||
#define MII_LAN83C185_CTRL_STATUS 17 /* Mode/Status Register */
|
||||
|
||||
#define MII_LAN83C185_ISF_INT1 (1<<1) /* Auto-Negotiation Page Received */
|
||||
#define MII_LAN83C185_ISF_INT2 (1<<2) /* Parallel Detection Fault */
|
||||
#define MII_LAN83C185_ISF_INT3 (1<<3) /* Auto-Negotiation LP Ack */
|
||||
#define MII_LAN83C185_ISF_INT4 (1<<4) /* Link Down */
|
||||
#define MII_LAN83C185_ISF_INT5 (1<<5) /* Remote Fault Detected */
|
||||
#define MII_LAN83C185_ISF_INT6 (1<<6) /* Auto-Negotiation complete */
|
||||
#define MII_LAN83C185_ISF_INT7 (1<<7) /* ENERGYON */
|
||||
|
||||
#define MII_LAN83C185_ISF_INT_ALL (0x0e)
|
||||
|
||||
#define MII_LAN83C185_ISF_INT_PHYLIB_EVENTS \
|
||||
(MII_LAN83C185_ISF_INT6 | MII_LAN83C185_ISF_INT4 | \
|
||||
MII_LAN83C185_ISF_INT7)
|
||||
|
||||
#define MII_LAN83C185_EDPWRDOWN (1 << 13) /* EDPWRDOWN */
|
||||
#define MII_LAN83C185_ENERGYON (1 << 1) /* ENERGYON */
|
||||
|
||||
#endif /* __LINUX_SMSCPHY_H__ */
|
||||
48
include/linux/sock_diag.h
Normal file
48
include/linux/sock_diag.h
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
#ifndef __SOCK_DIAG_H__
|
||||
#define __SOCK_DIAG_H__
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define SOCK_DIAG_BY_FAMILY 20
|
||||
|
||||
struct sock_diag_req {
|
||||
__u8 sdiag_family;
|
||||
__u8 sdiag_protocol;
|
||||
};
|
||||
|
||||
enum {
|
||||
SK_MEMINFO_RMEM_ALLOC,
|
||||
SK_MEMINFO_RCVBUF,
|
||||
SK_MEMINFO_WMEM_ALLOC,
|
||||
SK_MEMINFO_SNDBUF,
|
||||
SK_MEMINFO_FWD_ALLOC,
|
||||
SK_MEMINFO_WMEM_QUEUED,
|
||||
SK_MEMINFO_OPTMEM,
|
||||
|
||||
SK_MEMINFO_VARS,
|
||||
};
|
||||
|
||||
#ifdef __KERNEL__
|
||||
struct sk_buff;
|
||||
struct nlmsghdr;
|
||||
struct sock;
|
||||
|
||||
struct sock_diag_handler {
|
||||
__u8 family;
|
||||
int (*dump)(struct sk_buff *skb, struct nlmsghdr *nlh);
|
||||
};
|
||||
|
||||
int sock_diag_register(struct sock_diag_handler *h);
|
||||
void sock_diag_unregister(struct sock_diag_handler *h);
|
||||
|
||||
void sock_diag_register_inet_compat(int (*fn)(struct sk_buff *skb, struct nlmsghdr *nlh));
|
||||
void sock_diag_unregister_inet_compat(int (*fn)(struct sk_buff *skb, struct nlmsghdr *nlh));
|
||||
|
||||
int sock_diag_check_cookie(void *sk, __u32 *cookie);
|
||||
void sock_diag_save_cookie(void *sk, __u32 *cookie);
|
||||
|
||||
int sock_diag_put_meminfo(struct sock *sk, struct sk_buff *skb, int attr);
|
||||
|
||||
extern struct sock *sock_diag_nlsk;
|
||||
#endif /* KERNEL */
|
||||
#endif
|
||||
|
|
@ -94,6 +94,15 @@ struct ssb_sprom {
|
|||
} ghz5; /* 5GHz band */
|
||||
} antenna_gain;
|
||||
|
||||
struct {
|
||||
struct {
|
||||
u8 tssipos, extpa_gain, pdet_range, tr_iso, antswlut;
|
||||
} ghz2;
|
||||
struct {
|
||||
u8 tssipos, extpa_gain, pdet_range, tr_iso, antswlut;
|
||||
} ghz5;
|
||||
} fem;
|
||||
|
||||
/* TODO - add any parameters needed from rev 2, 3, 4, 5 or 8 SPROMs */
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -432,6 +432,23 @@
|
|||
#define SSB_SPROM8_RXPO2G 0x00FF /* 2GHz RX power offset */
|
||||
#define SSB_SPROM8_RXPO5G 0xFF00 /* 5GHz RX power offset */
|
||||
#define SSB_SPROM8_RXPO5G_SHIFT 8
|
||||
#define SSB_SPROM8_FEM2G 0x00AE
|
||||
#define SSB_SPROM8_FEM5G 0x00B0
|
||||
#define SSB_SROM8_FEM_TSSIPOS 0x0001
|
||||
#define SSB_SROM8_FEM_TSSIPOS_SHIFT 0
|
||||
#define SSB_SROM8_FEM_EXTPA_GAIN 0x0006
|
||||
#define SSB_SROM8_FEM_EXTPA_GAIN_SHIFT 1
|
||||
#define SSB_SROM8_FEM_PDET_RANGE 0x00F8
|
||||
#define SSB_SROM8_FEM_PDET_RANGE_SHIFT 3
|
||||
#define SSB_SROM8_FEM_TR_ISO 0x0700
|
||||
#define SSB_SROM8_FEM_TR_ISO_SHIFT 8
|
||||
#define SSB_SROM8_FEM_ANTSWLUT 0xF800
|
||||
#define SSB_SROM8_FEM_ANTSWLUT_SHIFT 11
|
||||
#define SSB_SPROM8_THERMAL 0x00B2
|
||||
#define SSB_SPROM8_MPWR_RAWTS 0x00B4
|
||||
#define SSB_SPROM8_TS_SLP_OPT_CORRX 0x00B6
|
||||
#define SSB_SPROM8_FOC_HWIQ_IQSWP 0x00B8
|
||||
#define SSB_SPROM8_PHYCAL_TEMPDELTA 0x00BA
|
||||
#define SSB_SPROM8_MAXP_BG 0x00C0 /* Max Power 2GHz in path 1 */
|
||||
#define SSB_SPROM8_MAXP_BG_MASK 0x00FF /* Mask for Max Power 2GHz */
|
||||
#define SSB_SPROM8_ITSSI_BG 0xFF00 /* Mask for path 1 itssi_bg */
|
||||
|
|
|
|||
|
|
@ -215,7 +215,7 @@ static inline bool __rpc_copy_addr4(struct sockaddr *dst,
|
|||
return true;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
static inline bool __rpc_cmp_addr6(const struct sockaddr *sap1,
|
||||
const struct sockaddr *sap2)
|
||||
{
|
||||
|
|
@ -237,10 +237,10 @@ static inline bool __rpc_copy_addr6(struct sockaddr *dst,
|
|||
struct sockaddr_in6 *dsin6 = (struct sockaddr_in6 *) dst;
|
||||
|
||||
dsin6->sin6_family = ssin6->sin6_family;
|
||||
ipv6_addr_copy(&dsin6->sin6_addr, &ssin6->sin6_addr);
|
||||
dsin6->sin6_addr = ssin6->sin6_addr;
|
||||
return true;
|
||||
}
|
||||
#else /* !(CONFIG_IPV6 || CONFIG_IPV6_MODULE) */
|
||||
#else /* !(IS_ENABLED(CONFIG_IPV6) */
|
||||
static inline bool __rpc_cmp_addr6(const struct sockaddr *sap1,
|
||||
const struct sockaddr *sap2)
|
||||
{
|
||||
|
|
@ -252,7 +252,7 @@ static inline bool __rpc_copy_addr6(struct sockaddr *dst,
|
|||
{
|
||||
return false;
|
||||
}
|
||||
#endif /* !(CONFIG_IPV6 || CONFIG_IPV6_MODULE) */
|
||||
#endif /* !(IS_ENABLED(CONFIG_IPV6) */
|
||||
|
||||
/**
|
||||
* rpc_cmp_addr - compare the address portion of two sockaddrs.
|
||||
|
|
|
|||
|
|
@ -238,6 +238,11 @@ struct tcp_sack_block {
|
|||
u32 end_seq;
|
||||
};
|
||||
|
||||
/*These are used to set the sack_ok field in struct tcp_options_received */
|
||||
#define TCP_SACK_SEEN (1 << 0) /*1 = peer is SACK capable, */
|
||||
#define TCP_FACK_ENABLED (1 << 1) /*1 = FACK is enabled locally*/
|
||||
#define TCP_DSACK_SEEN (1 << 2) /*1 = DSACK was received from peer*/
|
||||
|
||||
struct tcp_options_received {
|
||||
/* PAWS/RTTM data */
|
||||
long ts_recent_stamp;/* Time we stored ts_recent (for aging) */
|
||||
|
|
|
|||
54
include/linux/unix_diag.h
Normal file
54
include/linux/unix_diag.h
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
#ifndef __UNIX_DIAG_H__
|
||||
#define __UNIX_DIAG_H__
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
struct unix_diag_req {
|
||||
__u8 sdiag_family;
|
||||
__u8 sdiag_protocol;
|
||||
__u16 pad;
|
||||
__u32 udiag_states;
|
||||
__u32 udiag_ino;
|
||||
__u32 udiag_show;
|
||||
__u32 udiag_cookie[2];
|
||||
};
|
||||
|
||||
#define UDIAG_SHOW_NAME 0x00000001 /* show name (not path) */
|
||||
#define UDIAG_SHOW_VFS 0x00000002 /* show VFS inode info */
|
||||
#define UDIAG_SHOW_PEER 0x00000004 /* show peer socket info */
|
||||
#define UDIAG_SHOW_ICONS 0x00000008 /* show pending connections */
|
||||
#define UDIAG_SHOW_RQLEN 0x00000010 /* show skb receive queue len */
|
||||
#define UDIAG_SHOW_MEMINFO 0x00000020 /* show memory info of a socket */
|
||||
|
||||
struct unix_diag_msg {
|
||||
__u8 udiag_family;
|
||||
__u8 udiag_type;
|
||||
__u8 udiag_state;
|
||||
__u8 pad;
|
||||
|
||||
__u32 udiag_ino;
|
||||
__u32 udiag_cookie[2];
|
||||
};
|
||||
|
||||
enum {
|
||||
UNIX_DIAG_NAME,
|
||||
UNIX_DIAG_VFS,
|
||||
UNIX_DIAG_PEER,
|
||||
UNIX_DIAG_ICONS,
|
||||
UNIX_DIAG_RQLEN,
|
||||
UNIX_DIAG_MEMINFO,
|
||||
|
||||
UNIX_DIAG_MAX,
|
||||
};
|
||||
|
||||
struct unix_diag_vfs {
|
||||
__u32 udiag_vfs_ino;
|
||||
__u32 udiag_vfs_dev;
|
||||
};
|
||||
|
||||
struct unix_diag_rqlen {
|
||||
__u32 udiag_rqueue;
|
||||
__u32 udiag_wqueue;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -102,6 +102,10 @@
|
|||
* vdev: the virtio_device
|
||||
* This gives the final feature bits for the device: it can change
|
||||
* the dev->feature bits if it wants.
|
||||
* @bus_name: return the bus name associated with the device
|
||||
* vdev: the virtio_device
|
||||
* This returns a pointer to the bus name a la pci_name from which
|
||||
* the caller can then copy.
|
||||
*/
|
||||
typedef void vq_callback_t(struct virtqueue *);
|
||||
struct virtio_config_ops {
|
||||
|
|
@ -119,6 +123,7 @@ struct virtio_config_ops {
|
|||
void (*del_vqs)(struct virtio_device *);
|
||||
u32 (*get_features)(struct virtio_device *vdev);
|
||||
void (*finalize_features)(struct virtio_device *vdev);
|
||||
const char *(*bus_name)(struct virtio_device *vdev);
|
||||
};
|
||||
|
||||
/* If driver didn't advertise the feature, it will never appear. */
|
||||
|
|
@ -184,5 +189,14 @@ struct virtqueue *virtio_find_single_vq(struct virtio_device *vdev,
|
|||
return ERR_PTR(err);
|
||||
return vq;
|
||||
}
|
||||
|
||||
static inline
|
||||
const char *virtio_bus_name(struct virtio_device *vdev)
|
||||
{
|
||||
if (!vdev->config->bus_name)
|
||||
return "virtio";
|
||||
return vdev->config->bus_name(vdev);
|
||||
}
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _LINUX_VIRTIO_CONFIG_H */
|
||||
|
|
|
|||
|
|
@ -54,6 +54,9 @@ struct wl12xx_platform_data {
|
|||
int board_ref_clock;
|
||||
int board_tcxo_clock;
|
||||
unsigned long platform_quirks;
|
||||
bool pwr_in_suspend;
|
||||
|
||||
struct wl1271_if_operations *ops;
|
||||
};
|
||||
|
||||
/* Platform does not support level trigger interrupts */
|
||||
|
|
@ -73,6 +76,6 @@ int wl12xx_set_platform_data(const struct wl12xx_platform_data *data)
|
|||
|
||||
#endif
|
||||
|
||||
const struct wl12xx_platform_data *wl12xx_get_platform_data(void);
|
||||
struct wl12xx_platform_data *wl12xx_get_platform_data(void);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in a new issue