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: (1287 commits) icmp: Fix regression in nexthop resolution during replies. net: Fix ppc64 BPF JIT dependencies. acenic: include NET_SKB_PAD headroom to incoming skbs ixgbe: convert to ndo_fix_features ixgbe: only enable WoL for magic packet by default ixgbe: remove ifdef check for non-existent define ixgbe: Pass staterr instead of re-reading status and error bits from descriptor ixgbe: Move interrupt related values out of ring and into q_vector ixgbe: add structure for containing RX/TX rings to q_vector ixgbe: inline the ixgbe_maybe_stop_tx function ixgbe: Update ATR to use recorded TX queues instead of CPU for routing igb: Fix for DH89xxCC near end loopback test e1000: always call e1000_check_for_link() on e1000_ce4100 MACs. netxen: add fw version compatibility check be2net: request native mode each time the card is reset ipv4: Constrain UFO fragment sizes to multiples of 8 bytes virtio_net: Fix panic in virtnet_remove ipv6: make fragment identifications less predictable ipv6: unshare inetpeers can: make function can_get_bittiming static ...
This commit is contained in:
@@ -20,6 +20,7 @@
|
||||
#include <linux/if_arcnet.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/irqreturn.h>
|
||||
|
||||
#ifndef bool
|
||||
#define bool int
|
||||
|
@@ -30,6 +30,8 @@ struct ath9k_platform_data {
|
||||
u32 gpio_val;
|
||||
|
||||
bool is_clk_25mhz;
|
||||
int (*get_mac_revision)(void);
|
||||
int (*external_reset)(void);
|
||||
};
|
||||
|
||||
#endif /* _LINUX_ATH9K_PLATFORM_H */
|
||||
|
@@ -613,6 +613,12 @@ extern void audit_log_d_path(struct audit_buffer *ab,
|
||||
extern void audit_log_key(struct audit_buffer *ab,
|
||||
char *key);
|
||||
extern void audit_log_lost(const char *message);
|
||||
#ifdef CONFIG_SECURITY
|
||||
extern void audit_log_secctx(struct audit_buffer *ab, u32 secid);
|
||||
#else
|
||||
#define audit_log_secctx(b,s) do { ; } while (0)
|
||||
#endif
|
||||
|
||||
extern int audit_update_lsm_rules(void);
|
||||
|
||||
/* Private API (for audit.c only) */
|
||||
@@ -635,6 +641,7 @@ extern int audit_enabled;
|
||||
#define audit_log_untrustedstring(a,s) do { ; } while (0)
|
||||
#define audit_log_d_path(b, p, d) do { ; } while (0)
|
||||
#define audit_log_key(b, k) do { ; } while (0)
|
||||
#define audit_log_secctx(b,s) do { ; } while (0)
|
||||
#define audit_enabled 0
|
||||
#endif
|
||||
#endif
|
||||
|
@@ -6,6 +6,7 @@
|
||||
|
||||
#include <linux/bcma/bcma_driver_chipcommon.h>
|
||||
#include <linux/bcma/bcma_driver_pci.h>
|
||||
#include <linux/ssb/ssb.h> /* SPROM sharing */
|
||||
|
||||
#include "bcma_regs.h"
|
||||
|
||||
@@ -31,6 +32,12 @@ struct bcma_host_ops {
|
||||
void (*write8)(struct bcma_device *core, u16 offset, u8 value);
|
||||
void (*write16)(struct bcma_device *core, u16 offset, u16 value);
|
||||
void (*write32)(struct bcma_device *core, u16 offset, u32 value);
|
||||
#ifdef CONFIG_BCMA_BLOCKIO
|
||||
void (*block_read)(struct bcma_device *core, void *buffer,
|
||||
size_t count, u16 offset, u8 reg_width);
|
||||
void (*block_write)(struct bcma_device *core, const void *buffer,
|
||||
size_t count, u16 offset, u8 reg_width);
|
||||
#endif
|
||||
/* Agent ops */
|
||||
u32 (*aread32)(struct bcma_device *core, u16 offset);
|
||||
void (*awrite32)(struct bcma_device *core, u16 offset, u32 value);
|
||||
@@ -117,6 +124,8 @@ struct bcma_device {
|
||||
struct bcma_device_id id;
|
||||
|
||||
struct device dev;
|
||||
struct device *dma_dev;
|
||||
unsigned int irq;
|
||||
bool dev_registered;
|
||||
|
||||
u8 core_index;
|
||||
@@ -179,6 +188,10 @@ struct bcma_bus {
|
||||
|
||||
struct bcma_drv_cc drv_cc;
|
||||
struct bcma_drv_pci drv_pci;
|
||||
|
||||
/* We decided to share SPROM struct with SSB as long as we do not need
|
||||
* any hacks for BCMA. This simplifies drivers code. */
|
||||
struct ssb_sprom sprom;
|
||||
};
|
||||
|
||||
extern inline u32 bcma_read8(struct bcma_device *core, u16 offset)
|
||||
@@ -208,6 +221,18 @@ 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,
|
||||
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)
|
||||
{
|
||||
core->bus->ops->block_write(core, buffer, count, offset, reg_width);
|
||||
}
|
||||
#endif
|
||||
extern inline u32 bcma_aread32(struct bcma_device *core, u16 offset)
|
||||
{
|
||||
return core->bus->ops->aread32(core, offset);
|
||||
@@ -219,6 +244,7 @@ void bcma_awrite32(struct bcma_device *core, u16 offset, u32 value)
|
||||
}
|
||||
|
||||
extern bool bcma_core_is_enabled(struct bcma_device *core);
|
||||
extern void bcma_core_disable(struct bcma_device *core, u32 flags);
|
||||
extern int bcma_core_enable(struct bcma_device *core, u32 flags);
|
||||
|
||||
#endif /* LINUX_BCMA_H_ */
|
||||
|
@@ -244,6 +244,7 @@
|
||||
#define BCMA_CC_REGCTL_DATA 0x065C
|
||||
#define BCMA_CC_PLLCTL_ADDR 0x0660
|
||||
#define BCMA_CC_PLLCTL_DATA 0x0664
|
||||
#define BCMA_CC_SPROM 0x0830 /* SPROM beginning */
|
||||
|
||||
/* Data for the PMU, if available.
|
||||
* Check availability with ((struct bcma_chipcommon)->capabilities & BCMA_CC_CAP_PMU)
|
||||
|
@@ -85,5 +85,7 @@ struct bcma_drv_pci {
|
||||
#define pcicore_write32(pc, offset, val) bcma_write32((pc)->core, offset, val)
|
||||
|
||||
extern void bcma_core_pci_init(struct bcma_drv_pci *pc);
|
||||
extern int bcma_core_pci_irq_ctl(struct bcma_drv_pci *pc,
|
||||
struct bcma_device *core, bool enable);
|
||||
|
||||
#endif /* LINUX_BCMA_DRIVER_PCI_H_ */
|
||||
|
48
include/linux/cordic.h
Normal file
48
include/linux/cordic.h
Normal file
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright (c) 2011 Broadcom Corporation
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
#ifndef __CORDIC_H_
|
||||
#define __CORDIC_H_
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/**
|
||||
* struct cordic_iq - i/q coordinate.
|
||||
*
|
||||
* @i: real part of coordinate (in phase).
|
||||
* @q: imaginary part of coordinate (quadrature).
|
||||
*/
|
||||
struct cordic_iq {
|
||||
s32 i;
|
||||
s32 q;
|
||||
};
|
||||
|
||||
/**
|
||||
* cordic_calc_iq() - calculates the i/q coordinate for given angle.
|
||||
*
|
||||
* @theta: angle in degrees for which i/q coordinate is to be calculated.
|
||||
* @coord: function output parameter holding the i/q coordinate.
|
||||
*
|
||||
* The function calculates the i/q coordinate for a given angle using
|
||||
* cordic algorithm. The coordinate consists of a real (i) and an
|
||||
* imaginary (q) part. The real part is essentially the cosine of the
|
||||
* angle and the imaginary part is the sine of the angle. The returned
|
||||
* values are scaled by 2^16 for precision. The range for theta is
|
||||
* for -180 degrees to +180 degrees. Passed values outside this range are
|
||||
* converted before doing the actual calculation.
|
||||
*/
|
||||
struct cordic_iq cordic_calc_iq(s32 theta);
|
||||
|
||||
#endif /* __CORDIC_H_ */
|
101
include/linux/crc8.h
Normal file
101
include/linux/crc8.h
Normal file
@@ -0,0 +1,101 @@
|
||||
/*
|
||||
* Copyright (c) 2011 Broadcom Corporation
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
||||
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
#ifndef __CRC8_H_
|
||||
#define __CRC8_H_
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/* see usage of this value in crc8() description */
|
||||
#define CRC8_INIT_VALUE 0xFF
|
||||
|
||||
/*
|
||||
* Return value of crc8() indicating valid message+crc. This is true
|
||||
* if a CRC is inverted before transmission. The CRC computed over the
|
||||
* whole received bitstream is _table[x], where x is the bit pattern
|
||||
* of the modification (almost always 0xff).
|
||||
*/
|
||||
#define CRC8_GOOD_VALUE(_table) (_table[0xFF])
|
||||
|
||||
/* required table size for crc8 algorithm */
|
||||
#define CRC8_TABLE_SIZE 256
|
||||
|
||||
/* helper macro assuring right table size is used */
|
||||
#define DECLARE_CRC8_TABLE(_table) \
|
||||
static u8 _table[CRC8_TABLE_SIZE]
|
||||
|
||||
/**
|
||||
* crc8_populate_lsb - fill crc table for given polynomial in regular bit order.
|
||||
*
|
||||
* @table: table to be filled.
|
||||
* @polynomial: polynomial for which table is to be filled.
|
||||
*
|
||||
* This function fills the provided table according the polynomial provided for
|
||||
* regular bit order (lsb first). Polynomials in CRC algorithms are typically
|
||||
* represented as shown below.
|
||||
*
|
||||
* poly = x^8 + x^7 + x^6 + x^4 + x^2 + 1
|
||||
*
|
||||
* For lsb first direction x^7 maps to the lsb. So the polynomial is as below.
|
||||
*
|
||||
* - lsb first: poly = 10101011(1) = 0xAB
|
||||
*/
|
||||
void crc8_populate_lsb(u8 table[CRC8_TABLE_SIZE], u8 polynomial);
|
||||
|
||||
/**
|
||||
* crc8_populate_msb - fill crc table for given polynomial in reverse bit order.
|
||||
*
|
||||
* @table: table to be filled.
|
||||
* @polynomial: polynomial for which table is to be filled.
|
||||
*
|
||||
* This function fills the provided table according the polynomial provided for
|
||||
* reverse bit order (msb first). Polynomials in CRC algorithms are typically
|
||||
* represented as shown below.
|
||||
*
|
||||
* poly = x^8 + x^7 + x^6 + x^4 + x^2 + 1
|
||||
*
|
||||
* For msb first direction x^7 maps to the msb. So the polynomial is as below.
|
||||
*
|
||||
* - msb first: poly = (1)11010101 = 0xD5
|
||||
*/
|
||||
void crc8_populate_msb(u8 table[CRC8_TABLE_SIZE], u8 polynomial);
|
||||
|
||||
/**
|
||||
* crc8() - calculate a crc8 over the given input data.
|
||||
*
|
||||
* @table: crc table used for calculation.
|
||||
* @pdata: pointer to data buffer.
|
||||
* @nbytes: number of bytes in data buffer.
|
||||
* @crc: previous returned crc8 value.
|
||||
*
|
||||
* The CRC8 is calculated using the polynomial given in crc8_populate_msb()
|
||||
* or crc8_populate_lsb().
|
||||
*
|
||||
* The caller provides the initial value (either %CRC8_INIT_VALUE
|
||||
* or the previous returned value) to allow for processing of
|
||||
* discontiguous blocks of data. When generating the CRC the
|
||||
* caller is responsible for complementing the final return value
|
||||
* and inserting it into the byte stream. When validating a byte
|
||||
* stream (including CRC8), a final return value of %CRC8_GOOD_VALUE
|
||||
* indicates the byte stream data can be considered valid.
|
||||
*
|
||||
* Reference:
|
||||
* "A Painless Guide to CRC Error Detection Algorithms", ver 3, Aug 1993
|
||||
* Williams, Ross N., ross<at>ross.net
|
||||
* (see URL http://www.ross.net/crc/download/crc_v3.txt).
|
||||
*/
|
||||
u8 crc8(const u8 table[CRC8_TABLE_SIZE], u8 *pdata, size_t nbytes, u8 crc);
|
||||
|
||||
#endif /* __CRC8_H_ */
|
@@ -203,6 +203,7 @@ struct dcbmsg {
|
||||
* @DCB_CMD_GFEATCFG: get DCBX features flags
|
||||
* @DCB_CMD_SFEATCFG: set DCBX features negotiation flags
|
||||
* @DCB_CMD_CEE_GET: get CEE aggregated configuration
|
||||
* @DCB_CMD_IEEE_DEL: delete IEEE 802.1Qaz configuration
|
||||
*/
|
||||
enum dcbnl_commands {
|
||||
DCB_CMD_UNDEFINED,
|
||||
@@ -246,6 +247,7 @@ enum dcbnl_commands {
|
||||
DCB_CMD_SFEATCFG,
|
||||
|
||||
DCB_CMD_CEE_GET,
|
||||
DCB_CMD_IEEE_DEL,
|
||||
|
||||
__DCB_CMD_ENUM_MAX,
|
||||
DCB_CMD_MAX = __DCB_CMD_ENUM_MAX - 1,
|
||||
@@ -331,18 +333,30 @@ enum ieee_attrs_app {
|
||||
#define DCB_ATTR_IEEE_APP_MAX (__DCB_ATTR_IEEE_APP_MAX - 1)
|
||||
|
||||
/**
|
||||
* enum cee_attrs - CEE DCBX get attributes
|
||||
* enum cee_attrs - CEE DCBX get attributes.
|
||||
*
|
||||
* @DCB_ATTR_CEE_UNSPEC: unspecified
|
||||
* @DCB_ATTR_CEE_PEER_PG: peer PG configuration - get only
|
||||
* @DCB_ATTR_CEE_PEER_PFC: peer PFC configuration - get only
|
||||
* @DCB_ATTR_CEE_PEER_APP: peer APP tlv - get only
|
||||
* @DCB_ATTR_CEE_PEER_APP_TABLE: peer APP tlv - get only
|
||||
* @DCB_ATTR_CEE_TX_PG: TX PG configuration (DCB_CMD_PGTX_GCFG)
|
||||
* @DCB_ATTR_CEE_RX_PG: RX PG configuration (DCB_CMD_PGRX_GCFG)
|
||||
* @DCB_ATTR_CEE_PFC: PFC configuration (DCB_CMD_PFC_GCFG)
|
||||
* @DCB_ATTR_CEE_APP_TABLE: APP configuration (multi DCB_CMD_GAPP)
|
||||
* @DCB_ATTR_CEE_FEAT: DCBX features flags (DCB_CMD_GFEATCFG)
|
||||
*
|
||||
* An aggregated collection of the cee std negotiated parameters.
|
||||
*/
|
||||
enum cee_attrs {
|
||||
DCB_ATTR_CEE_UNSPEC,
|
||||
DCB_ATTR_CEE_PEER_PG,
|
||||
DCB_ATTR_CEE_PEER_PFC,
|
||||
DCB_ATTR_CEE_PEER_APP_TABLE,
|
||||
DCB_ATTR_CEE_TX_PG,
|
||||
DCB_ATTR_CEE_RX_PG,
|
||||
DCB_ATTR_CEE_PFC,
|
||||
DCB_ATTR_CEE_APP_TABLE,
|
||||
DCB_ATTR_CEE_FEAT,
|
||||
__DCB_ATTR_CEE_MAX
|
||||
};
|
||||
#define DCB_ATTR_CEE_MAX (__DCB_ATTR_CEE_MAX - 1)
|
||||
@@ -355,6 +369,13 @@ enum peer_app_attr {
|
||||
};
|
||||
#define DCB_ATTR_CEE_PEER_APP_MAX (__DCB_ATTR_CEE_PEER_APP_MAX - 1)
|
||||
|
||||
enum cee_attrs_app {
|
||||
DCB_ATTR_CEE_APP_UNSPEC,
|
||||
DCB_ATTR_CEE_APP,
|
||||
__DCB_ATTR_CEE_APP_MAX
|
||||
};
|
||||
#define DCB_ATTR_CEE_APP_MAX (__DCB_ATTR_CEE_APP_MAX - 1)
|
||||
|
||||
/**
|
||||
* enum dcbnl_pfc_attrs - DCB Priority Flow Control user priority nested attrs
|
||||
*
|
||||
|
@@ -236,6 +236,7 @@ enum dccp_packet_dequeueing_policy {
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/in.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/ktime.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/uio.h>
|
||||
|
13
include/linux/dma-direction.h
Normal file
13
include/linux/dma-direction.h
Normal file
@@ -0,0 +1,13 @@
|
||||
#ifndef _LINUX_DMA_DIRECTION_H
|
||||
#define _LINUX_DMA_DIRECTION_H
|
||||
/*
|
||||
* These definitions mirror those in pci.h, so they can be used
|
||||
* interchangeably with their PCI_ counterparts.
|
||||
*/
|
||||
enum dma_data_direction {
|
||||
DMA_BIDIRECTIONAL = 0,
|
||||
DMA_TO_DEVICE = 1,
|
||||
DMA_FROM_DEVICE = 2,
|
||||
DMA_NONE = 3,
|
||||
};
|
||||
#endif
|
@@ -4,17 +4,9 @@
|
||||
#include <linux/device.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/dma-attrs.h>
|
||||
#include <linux/dma-direction.h>
|
||||
#include <linux/scatterlist.h>
|
||||
|
||||
/* These definitions mirror those in pci.h, so they can be used
|
||||
* interchangeably with their PCI_ counterparts */
|
||||
enum dma_data_direction {
|
||||
DMA_BIDIRECTIONAL = 0,
|
||||
DMA_TO_DEVICE = 1,
|
||||
DMA_FROM_DEVICE = 2,
|
||||
DMA_NONE = 3,
|
||||
};
|
||||
|
||||
struct dma_map_ops {
|
||||
void* (*alloc_coherent)(struct device *dev, size_t size,
|
||||
dma_addr_t *dma_handle, gfp_t gfp);
|
||||
|
@@ -23,7 +23,9 @@
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/uio.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/dma-direction.h>
|
||||
|
||||
struct scatterlist;
|
||||
|
||||
/**
|
||||
* typedef dma_cookie_t - an opaque DMA cookie
|
||||
|
@@ -38,7 +38,7 @@ extern int eth_header(struct sk_buff *skb, struct net_device *dev,
|
||||
const void *daddr, const void *saddr, unsigned len);
|
||||
extern int eth_rebuild_header(struct sk_buff *skb);
|
||||
extern int eth_header_parse(const struct sk_buff *skb, unsigned char *haddr);
|
||||
extern int eth_header_cache(const struct neighbour *neigh, struct hh_cache *hh);
|
||||
extern int eth_header_cache(const struct neighbour *neigh, struct hh_cache *hh, __be16 type);
|
||||
extern void eth_header_cache_update(struct hh_cache *hh,
|
||||
const struct net_device *dev,
|
||||
const unsigned char *haddr);
|
||||
|
@@ -287,7 +287,7 @@ enum ethtool_stringset {
|
||||
ETH_SS_TEST = 0,
|
||||
ETH_SS_STATS,
|
||||
ETH_SS_PRIV_FLAGS,
|
||||
ETH_SS_NTUPLE_FILTERS,
|
||||
ETH_SS_NTUPLE_FILTERS, /* Do not use, GRXNTUPLE is now deprecated */
|
||||
ETH_SS_FEATURES,
|
||||
};
|
||||
|
||||
@@ -310,9 +310,21 @@ struct ethtool_sset_info {
|
||||
__u32's, etc. */
|
||||
};
|
||||
|
||||
/**
|
||||
* enum ethtool_test_flags - flags definition of ethtool_test
|
||||
* @ETH_TEST_FL_OFFLINE: if set perform online and offline tests, otherwise
|
||||
* only online tests.
|
||||
* @ETH_TEST_FL_FAILED: Driver set this flag if test fails.
|
||||
* @ETH_TEST_FL_EXTERNAL_LB: Application request to perform external loopback
|
||||
* test.
|
||||
* @ETH_TEST_FL_EXTERNAL_LB_DONE: Driver performed the external loopback test
|
||||
*/
|
||||
|
||||
enum ethtool_test_flags {
|
||||
ETH_TEST_FL_OFFLINE = (1 << 0), /* online / offline */
|
||||
ETH_TEST_FL_FAILED = (1 << 1), /* test passed / failed */
|
||||
ETH_TEST_FL_OFFLINE = (1 << 0),
|
||||
ETH_TEST_FL_FAILED = (1 << 1),
|
||||
ETH_TEST_FL_EXTERNAL_LB = (1 << 2),
|
||||
ETH_TEST_FL_EXTERNAL_LB_DONE = (1 << 3),
|
||||
};
|
||||
|
||||
/* for requesting NIC test and getting results*/
|
||||
@@ -714,18 +726,6 @@ enum ethtool_sfeatures_retval_bits {
|
||||
/* needed by dev_disable_lro() */
|
||||
extern int __ethtool_set_flags(struct net_device *dev, u32 flags);
|
||||
|
||||
struct ethtool_rx_ntuple_flow_spec_container {
|
||||
struct ethtool_rx_ntuple_flow_spec fs;
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
struct ethtool_rx_ntuple_list {
|
||||
#define ETHTOOL_MAX_NTUPLE_LIST_ENTRY 1024
|
||||
#define ETHTOOL_MAX_NTUPLE_STRING_PER_ENTRY 14
|
||||
struct list_head list;
|
||||
unsigned int count;
|
||||
};
|
||||
|
||||
/**
|
||||
* enum ethtool_phys_id_state - indicator state for physical identification
|
||||
* @ETHTOOL_ID_INACTIVE: Physical ID indicator should be deactivated
|
||||
@@ -758,7 +758,6 @@ 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);
|
||||
void ethtool_ntuple_flush(struct net_device *dev);
|
||||
bool ethtool_invalid_flags(struct net_device *dev, u32 data, u32 supported);
|
||||
|
||||
/**
|
||||
@@ -865,7 +864,6 @@ bool ethtool_invalid_flags(struct net_device *dev, u32 data, u32 supported);
|
||||
* error code or zero.
|
||||
* @set_rx_ntuple: Set an RX n-tuple rule. Returns a negative error code
|
||||
* or zero.
|
||||
* @get_rx_ntuple: Deprecated.
|
||||
* @get_rxfh_indir: Get the contents of the RX flow hash indirection table.
|
||||
* Returns a negative error code or zero.
|
||||
* @set_rxfh_indir: Set the contents of the RX flow hash indirection table.
|
||||
@@ -944,7 +942,6 @@ struct ethtool_ops {
|
||||
int (*reset)(struct net_device *, u32 *);
|
||||
int (*set_rx_ntuple)(struct net_device *,
|
||||
struct ethtool_rx_ntuple *);
|
||||
int (*get_rx_ntuple)(struct net_device *, u32 stringset, void *);
|
||||
int (*get_rxfh_indir)(struct net_device *,
|
||||
struct ethtool_rxfh_indir *);
|
||||
int (*set_rxfh_indir)(struct net_device *,
|
||||
@@ -1017,7 +1014,7 @@ struct ethtool_ops {
|
||||
#define ETHTOOL_FLASHDEV 0x00000033 /* Flash firmware to device */
|
||||
#define ETHTOOL_RESET 0x00000034 /* Reset hardware */
|
||||
#define ETHTOOL_SRXNTUPLE 0x00000035 /* Add an n-tuple filter to device */
|
||||
#define ETHTOOL_GRXNTUPLE 0x00000036 /* Get n-tuple filters from device */
|
||||
#define ETHTOOL_GRXNTUPLE 0x00000036 /* deprecated */
|
||||
#define ETHTOOL_GSSET_INFO 0x00000037 /* Get string set info */
|
||||
#define ETHTOOL_GRXFHINDIR 0x00000038 /* Get RX flow hash indir'n table */
|
||||
#define ETHTOOL_SRXFHINDIR 0x00000039 /* Set RX flow hash indir'n table */
|
||||
|
@@ -117,8 +117,19 @@
|
||||
#define IEEE80211_MAX_MESH_ID_LEN 32
|
||||
|
||||
#define IEEE80211_QOS_CTL_LEN 2
|
||||
#define IEEE80211_QOS_CTL_TID_MASK 0x000F
|
||||
#define IEEE80211_QOS_CTL_TAG1D_MASK 0x0007
|
||||
/* 1d tag mask */
|
||||
#define IEEE80211_QOS_CTL_TAG1D_MASK 0x0007
|
||||
/* TID mask */
|
||||
#define IEEE80211_QOS_CTL_TID_MASK 0x000f
|
||||
/* EOSP */
|
||||
#define IEEE80211_QOS_CTL_EOSP 0x0010
|
||||
/* ACK policy */
|
||||
#define IEEE80211_QOS_CTL_ACK_POLICY_NORMAL 0x0000
|
||||
#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
|
||||
/* A-MSDU 802.11n */
|
||||
#define IEEE80211_QOS_CTL_A_MSDU_PRESENT 0x0080
|
||||
|
||||
/* U-APSD queue for WMM IEs sent by AP */
|
||||
#define IEEE80211_WMM_IE_AP_QOSINFO_UAPSD (1<<7)
|
||||
@@ -1423,9 +1434,6 @@ enum ieee80211_sa_query_action {
|
||||
};
|
||||
|
||||
|
||||
/* A-MSDU 802.11n */
|
||||
#define IEEE80211_QOS_CONTROL_A_MSDU_PRESENT 0x0080
|
||||
|
||||
/* cipher suite selectors */
|
||||
#define WLAN_CIPHER_SUITE_USE_GROUP 0x000FAC00
|
||||
#define WLAN_CIPHER_SUITE_WEP40 0x000FAC01
|
||||
|
@@ -78,10 +78,15 @@
|
||||
*/
|
||||
#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_TIPC 0x88CA /* TIPC */
|
||||
#define ETH_P_8021AH 0x88E7 /* 802.1ah Backbone Service Tag */
|
||||
#define ETH_P_1588 0x88F7 /* IEEE 1588 Timesync */
|
||||
#define ETH_P_FCOE 0x8906 /* Fibre Channel over Ethernet */
|
||||
#define ETH_P_FIP 0x8914 /* FCoE Initialization Protocol */
|
||||
#define ETH_P_QINQ1 0x9100 /* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */
|
||||
#define ETH_P_QINQ2 0x9200 /* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */
|
||||
#define ETH_P_QINQ3 0x9300 /* deprecated QinQ VLAN [ NOT AN OFFICIALLY REGISTERED ID ] */
|
||||
#define ETH_P_EDSA 0xDADA /* Ethertype DSA [ NOT AN OFFICIALLY REGISTERED ID ] */
|
||||
|
||||
/*
|
||||
|
@@ -49,6 +49,12 @@ struct sockaddr_ll {
|
||||
#define PACKET_VNET_HDR 15
|
||||
#define PACKET_TX_TIMESTAMP 16
|
||||
#define PACKET_TIMESTAMP 17
|
||||
#define PACKET_FANOUT 18
|
||||
|
||||
#define PACKET_FANOUT_HASH 0
|
||||
#define PACKET_FANOUT_LB 1
|
||||
#define PACKET_FANOUT_CPU 2
|
||||
#define PACKET_FANOUT_FLAG_DEFRAG 0x8000
|
||||
|
||||
struct tpacket_stats {
|
||||
unsigned int tp_packets;
|
||||
|
@@ -91,25 +91,6 @@ struct vlan_group {
|
||||
struct rcu_head rcu;
|
||||
};
|
||||
|
||||
static inline struct net_device *vlan_group_get_device(struct vlan_group *vg,
|
||||
u16 vlan_id)
|
||||
{
|
||||
struct net_device **array;
|
||||
array = vg->vlan_devices_arrays[vlan_id / VLAN_GROUP_ARRAY_PART_LEN];
|
||||
return array ? array[vlan_id % VLAN_GROUP_ARRAY_PART_LEN] : NULL;
|
||||
}
|
||||
|
||||
static inline void vlan_group_set_device(struct vlan_group *vg,
|
||||
u16 vlan_id,
|
||||
struct net_device *dev)
|
||||
{
|
||||
struct net_device **array;
|
||||
if (!vg)
|
||||
return;
|
||||
array = vg->vlan_devices_arrays[vlan_id / VLAN_GROUP_ARRAY_PART_LEN];
|
||||
array[vlan_id % VLAN_GROUP_ARRAY_PART_LEN] = dev;
|
||||
}
|
||||
|
||||
static inline int is_vlan_dev(struct net_device *dev)
|
||||
{
|
||||
return dev->priv_flags & IFF_802_1Q_VLAN;
|
||||
@@ -119,35 +100,18 @@ static inline int is_vlan_dev(struct net_device *dev)
|
||||
#define vlan_tx_tag_get(__skb) ((__skb)->vlan_tci & ~VLAN_TAG_PRESENT)
|
||||
|
||||
#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
|
||||
/* Must be invoked with rcu_read_lock or with RTNL. */
|
||||
static inline struct net_device *vlan_find_dev(struct net_device *real_dev,
|
||||
u16 vlan_id)
|
||||
{
|
||||
struct vlan_group *grp = rcu_dereference_rtnl(real_dev->vlgrp);
|
||||
|
||||
if (grp)
|
||||
return vlan_group_get_device(grp, vlan_id);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
extern struct net_device *__vlan_find_dev_deep(struct net_device *real_dev,
|
||||
u16 vlan_id);
|
||||
extern struct net_device *vlan_dev_real_dev(const struct net_device *dev);
|
||||
extern u16 vlan_dev_vlan_id(const struct net_device *dev);
|
||||
|
||||
extern int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp,
|
||||
u16 vlan_tci, int polling);
|
||||
extern bool vlan_do_receive(struct sk_buff **skb);
|
||||
extern struct sk_buff *vlan_untag(struct sk_buff *skb);
|
||||
extern gro_result_t
|
||||
vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp,
|
||||
unsigned int vlan_tci, struct sk_buff *skb);
|
||||
extern gro_result_t
|
||||
vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp,
|
||||
unsigned int vlan_tci);
|
||||
|
||||
#else
|
||||
static inline struct net_device *vlan_find_dev(struct net_device *real_dev,
|
||||
u16 vlan_id)
|
||||
static inline struct net_device *
|
||||
__vlan_find_dev_deep(struct net_device *real_dev, u16 vlan_id)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
@@ -164,13 +128,6 @@ static inline u16 vlan_dev_vlan_id(const struct net_device *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp,
|
||||
u16 vlan_tci, int polling)
|
||||
{
|
||||
BUG();
|
||||
return NET_XMIT_SUCCESS;
|
||||
}
|
||||
|
||||
static inline bool vlan_do_receive(struct sk_buff **skb)
|
||||
{
|
||||
if ((*skb)->vlan_tci & VLAN_VID_MASK)
|
||||
@@ -182,48 +139,8 @@ static inline struct sk_buff *vlan_untag(struct sk_buff *skb)
|
||||
{
|
||||
return skb;
|
||||
}
|
||||
|
||||
static inline gro_result_t
|
||||
vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp,
|
||||
unsigned int vlan_tci, struct sk_buff *skb)
|
||||
{
|
||||
return GRO_DROP;
|
||||
}
|
||||
|
||||
static inline gro_result_t
|
||||
vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp,
|
||||
unsigned int vlan_tci)
|
||||
{
|
||||
return GRO_DROP;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* vlan_hwaccel_rx - netif_rx wrapper for VLAN RX acceleration
|
||||
* @skb: buffer
|
||||
* @grp: vlan group
|
||||
* @vlan_tci: VLAN TCI as received from the card
|
||||
*/
|
||||
static inline int vlan_hwaccel_rx(struct sk_buff *skb,
|
||||
struct vlan_group *grp,
|
||||
u16 vlan_tci)
|
||||
{
|
||||
return __vlan_hwaccel_rx(skb, grp, vlan_tci, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* vlan_hwaccel_receive_skb - netif_receive_skb wrapper for VLAN RX acceleration
|
||||
* @skb: buffer
|
||||
* @grp: vlan group
|
||||
* @vlan_tci: VLAN TCI as received from the card
|
||||
*/
|
||||
static inline int vlan_hwaccel_receive_skb(struct sk_buff *skb,
|
||||
struct vlan_group *grp,
|
||||
u16 vlan_tci)
|
||||
{
|
||||
return __vlan_hwaccel_rx(skb, grp, vlan_tci, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* vlan_insert_tag - regular VLAN tag inserting
|
||||
* @skb: skbuff to tag
|
||||
|
@@ -50,7 +50,6 @@ struct net_lro_desc {
|
||||
struct skb_frag_struct *next_frag;
|
||||
struct iphdr *iph;
|
||||
struct tcphdr *tcph;
|
||||
struct vlan_group *vgrp;
|
||||
__wsum data_csum;
|
||||
__be32 tcp_rcv_tsecr;
|
||||
__be32 tcp_rcv_tsval;
|
||||
@@ -60,7 +59,6 @@ struct net_lro_desc {
|
||||
u16 ip_tot_len;
|
||||
u16 tcp_saw_tstamp; /* timestamps enabled */
|
||||
__be16 tcp_window;
|
||||
u16 vlan_tag;
|
||||
int pkt_aggr_cnt; /* counts aggregated packets */
|
||||
int vlan_packet;
|
||||
int mss;
|
||||
@@ -136,16 +134,6 @@ void lro_receive_skb(struct net_lro_mgr *lro_mgr,
|
||||
struct sk_buff *skb,
|
||||
void *priv);
|
||||
|
||||
/*
|
||||
* Processes a SKB with VLAN HW acceleration support
|
||||
*/
|
||||
|
||||
void lro_vlan_hwaccel_receive_skb(struct net_lro_mgr *lro_mgr,
|
||||
struct sk_buff *skb,
|
||||
struct vlan_group *vgrp,
|
||||
u16 vlan_tag,
|
||||
void *priv);
|
||||
|
||||
/*
|
||||
* Processes a fragment list
|
||||
*
|
||||
@@ -165,13 +153,6 @@ void lro_receive_frags(struct net_lro_mgr *lro_mgr,
|
||||
struct skb_frag_struct *frags,
|
||||
int len, int true_size, void *priv, __wsum sum);
|
||||
|
||||
void lro_vlan_hwaccel_receive_frags(struct net_lro_mgr *lro_mgr,
|
||||
struct skb_frag_struct *frags,
|
||||
int len, int true_size,
|
||||
struct vlan_group *vgrp,
|
||||
u16 vlan_tag,
|
||||
void *priv, __wsum sum);
|
||||
|
||||
/*
|
||||
* Forward all aggregated SKBs held by lro_mgr to network stack
|
||||
*/
|
||||
|
@@ -128,6 +128,8 @@
|
||||
/* 1000BASE-T Control register */
|
||||
#define ADVERTISE_1000FULL 0x0200 /* Advertise 1000BASE-T full duplex */
|
||||
#define ADVERTISE_1000HALF 0x0100 /* Advertise 1000BASE-T half duplex */
|
||||
#define CTL1000_AS_MASTER 0x0800
|
||||
#define CTL1000_ENABLE_MASTER 0x1000
|
||||
|
||||
/* 1000BASE-T Status register */
|
||||
#define LPA_1000LOCALRXOK 0x2000 /* Link partner local receiver status */
|
||||
|
@@ -34,7 +34,6 @@
|
||||
#include <linux/pm_qos_params.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/mm.h>
|
||||
#include <asm/atomic.h>
|
||||
#include <asm/cache.h>
|
||||
#include <asm/byteorder.h>
|
||||
@@ -61,11 +60,6 @@ struct wireless_dev;
|
||||
#define SET_ETHTOOL_OPS(netdev,ops) \
|
||||
( (netdev)->ethtool_ops = (ops) )
|
||||
|
||||
#define HAVE_ALLOC_NETDEV /* feature macro: alloc_xxxdev
|
||||
functions are available. */
|
||||
#define HAVE_FREE_NETDEV /* free_netdev() */
|
||||
#define HAVE_NETDEV_PRIV /* netdev_priv() */
|
||||
|
||||
/* hardware address assignment types */
|
||||
#define NET_ADDR_PERM 0 /* address is permanent (default) */
|
||||
#define NET_ADDR_RANDOM 1 /* address is generated randomly */
|
||||
@@ -258,21 +252,8 @@ struct netdev_hw_addr_list {
|
||||
netdev_hw_addr_list_for_each(ha, &(dev)->mc)
|
||||
|
||||
struct hh_cache {
|
||||
struct hh_cache *hh_next; /* Next entry */
|
||||
atomic_t hh_refcnt; /* number of users */
|
||||
/*
|
||||
* We want hh_output, hh_len, hh_lock and hh_data be a in a separate
|
||||
* cache line on SMP.
|
||||
* They are mostly read, but hh_refcnt may be changed quite frequently,
|
||||
* incurring cache line ping pongs.
|
||||
*/
|
||||
__be16 hh_type ____cacheline_aligned_in_smp;
|
||||
/* protocol identifier, f.e ETH_P_IP
|
||||
* NOTE: For VLANs, this will be the
|
||||
* encapuslated type. --BLG
|
||||
*/
|
||||
u16 hh_len; /* length of header */
|
||||
int (*hh_output)(struct sk_buff *skb);
|
||||
u16 hh_len;
|
||||
u16 __pad;
|
||||
seqlock_t hh_lock;
|
||||
|
||||
/* cached hardware header; allow for machine alignment needs. */
|
||||
@@ -284,12 +265,6 @@ struct hh_cache {
|
||||
unsigned long hh_data[HH_DATA_ALIGN(LL_MAX_HEADER) / sizeof(long)];
|
||||
};
|
||||
|
||||
static inline void hh_cache_put(struct hh_cache *hh)
|
||||
{
|
||||
if (atomic_dec_and_test(&hh->hh_refcnt))
|
||||
kfree(hh);
|
||||
}
|
||||
|
||||
/* Reserve HH_DATA_MOD byte aligned hard_header_len, but at least that much.
|
||||
* Alternative is:
|
||||
* dev->hard_header_len ? (dev->hard_header_len +
|
||||
@@ -314,8 +289,7 @@ struct header_ops {
|
||||
const void *saddr, unsigned len);
|
||||
int (*parse)(const struct sk_buff *skb, unsigned char *haddr);
|
||||
int (*rebuild)(struct sk_buff *skb);
|
||||
#define HAVE_HEADER_CACHE
|
||||
int (*cache)(const struct neighbour *neigh, struct hh_cache *hh);
|
||||
int (*cache)(const struct neighbour *neigh, struct hh_cache *hh, __be16 type);
|
||||
void (*cache_update)(struct hh_cache *hh,
|
||||
const struct net_device *dev,
|
||||
const unsigned char *haddr);
|
||||
@@ -556,7 +530,7 @@ struct netdev_queue {
|
||||
struct Qdisc *qdisc;
|
||||
unsigned long state;
|
||||
struct Qdisc *qdisc_sleeping;
|
||||
#ifdef CONFIG_RPS
|
||||
#if defined(CONFIG_RPS) || defined(CONFIG_XPS)
|
||||
struct kobject kobj;
|
||||
#endif
|
||||
#if defined(CONFIG_XPS) && defined(CONFIG_NUMA)
|
||||
@@ -794,12 +768,6 @@ struct netdev_tc_txq {
|
||||
* 3. Update dev->stats asynchronously and atomically, and define
|
||||
* neither operation.
|
||||
*
|
||||
* void (*ndo_vlan_rx_register)(struct net_device *dev, struct vlan_group *grp);
|
||||
* If device support VLAN receive acceleration
|
||||
* (ie. dev->features & NETIF_F_HW_VLAN_RX), then this function is called
|
||||
* when vlan groups for the device changes. Note: grp is NULL
|
||||
* if no vlan's groups are being used.
|
||||
*
|
||||
* void (*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.
|
||||
@@ -888,7 +856,6 @@ struct netdev_tc_txq {
|
||||
* Must return >0 or -errno if it changed dev->features itself.
|
||||
*
|
||||
*/
|
||||
#define HAVE_NET_DEVICE_OPS
|
||||
struct net_device_ops {
|
||||
int (*ndo_init)(struct net_device *dev);
|
||||
void (*ndo_uninit)(struct net_device *dev);
|
||||
@@ -919,8 +886,6 @@ struct net_device_ops {
|
||||
struct rtnl_link_stats64 *storage);
|
||||
struct net_device_stats* (*ndo_get_stats)(struct net_device *dev);
|
||||
|
||||
void (*ndo_vlan_rx_register)(struct net_device *dev,
|
||||
struct vlan_group *grp);
|
||||
void (*ndo_vlan_rx_add_vid)(struct net_device *dev,
|
||||
unsigned short vid);
|
||||
void (*ndo_vlan_rx_kill_vid)(struct net_device *dev,
|
||||
@@ -1214,7 +1179,7 @@ struct net_device {
|
||||
|
||||
unsigned char broadcast[MAX_ADDR_LEN]; /* hw bcast add */
|
||||
|
||||
#ifdef CONFIG_RPS
|
||||
#if defined(CONFIG_RPS) || defined(CONFIG_XPS)
|
||||
struct kset *queues_kset;
|
||||
|
||||
struct netdev_rx_queue *_rx;
|
||||
@@ -1342,9 +1307,6 @@ struct net_device {
|
||||
/* max exchange id for FCoE LRO by ddp */
|
||||
unsigned int fcoe_ddp_xid;
|
||||
#endif
|
||||
/* n-tuple filter list attached to this device */
|
||||
struct ethtool_rx_ntuple_list ethtool_ntuple_list;
|
||||
|
||||
/* phy device may attach itself for hardware timestamping */
|
||||
struct phy_device *phydev;
|
||||
|
||||
@@ -1557,7 +1519,6 @@ struct packet_type {
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/notifier.h>
|
||||
|
||||
extern rwlock_t dev_base_lock; /* Device list lock */
|
||||
@@ -1780,8 +1741,6 @@ static inline void input_queue_tail_incr_save(struct softnet_data *sd,
|
||||
|
||||
DECLARE_PER_CPU_ALIGNED(struct softnet_data, softnet_data);
|
||||
|
||||
#define HAVE_NETIF_QUEUE
|
||||
|
||||
extern void __netif_schedule(struct Qdisc *q);
|
||||
|
||||
static inline void netif_schedule_queue(struct netdev_queue *txq)
|
||||
@@ -2057,10 +2016,8 @@ extern void dev_kfree_skb_irq(struct sk_buff *skb);
|
||||
*/
|
||||
extern void dev_kfree_skb_any(struct sk_buff *skb);
|
||||
|
||||
#define HAVE_NETIF_RX 1
|
||||
extern int netif_rx(struct sk_buff *skb);
|
||||
extern int netif_rx_ni(struct sk_buff *skb);
|
||||
#define HAVE_NETIF_RECEIVE_SKB 1
|
||||
extern int netif_receive_skb(struct sk_buff *skb);
|
||||
extern gro_result_t dev_gro_receive(struct napi_struct *napi,
|
||||
struct sk_buff *skb);
|
||||
@@ -2240,7 +2197,6 @@ extern void netif_device_attach(struct net_device *dev);
|
||||
/*
|
||||
* Network interface message level settings
|
||||
*/
|
||||
#define HAVE_NETIF_MSG 1
|
||||
|
||||
enum {
|
||||
NETIF_MSG_DRV = 0x0001,
|
||||
@@ -2558,7 +2514,6 @@ static inline u32 netdev_get_wanted_features(struct net_device *dev)
|
||||
return (dev->features & ~dev->hw_features) | dev->wanted_features;
|
||||
}
|
||||
u32 netdev_increment_features(u32 all, u32 one, u32 mask);
|
||||
u32 netdev_fix_features(struct net_device *dev, u32 features);
|
||||
int __netdev_update_features(struct net_device *dev);
|
||||
void netdev_update_features(struct net_device *dev);
|
||||
void netdev_change_features(struct net_device *dev);
|
||||
|
@@ -104,6 +104,8 @@ enum {
|
||||
IPSET_ATTR_NAMEREF,
|
||||
IPSET_ATTR_IP2,
|
||||
IPSET_ATTR_CIDR2,
|
||||
IPSET_ATTR_IP2_TO,
|
||||
IPSET_ATTR_IFACE,
|
||||
__IPSET_ATTR_ADT_MAX,
|
||||
};
|
||||
#define IPSET_ATTR_ADT_MAX (__IPSET_ATTR_ADT_MAX - 1)
|
||||
@@ -142,12 +144,18 @@ enum ipset_errno {
|
||||
enum ipset_cmd_flags {
|
||||
IPSET_FLAG_BIT_EXIST = 0,
|
||||
IPSET_FLAG_EXIST = (1 << IPSET_FLAG_BIT_EXIST),
|
||||
IPSET_FLAG_BIT_LIST_SETNAME = 1,
|
||||
IPSET_FLAG_LIST_SETNAME = (1 << IPSET_FLAG_BIT_LIST_SETNAME),
|
||||
IPSET_FLAG_BIT_LIST_HEADER = 2,
|
||||
IPSET_FLAG_LIST_HEADER = (1 << IPSET_FLAG_BIT_LIST_HEADER),
|
||||
};
|
||||
|
||||
/* Flags at CADT attribute level */
|
||||
enum ipset_cadt_flags {
|
||||
IPSET_FLAG_BIT_BEFORE = 0,
|
||||
IPSET_FLAG_BEFORE = (1 << IPSET_FLAG_BIT_BEFORE),
|
||||
IPSET_FLAG_BIT_PHYSDEV = 1,
|
||||
IPSET_FLAG_PHYSDEV = (1 << IPSET_FLAG_BIT_PHYSDEV),
|
||||
};
|
||||
|
||||
/* Commands with settype-specific attributes */
|
||||
@@ -165,6 +173,7 @@ enum ipset_adt {
|
||||
#include <linux/ipv6.h>
|
||||
#include <linux/netlink.h>
|
||||
#include <linux/netfilter.h>
|
||||
#include <linux/netfilter/x_tables.h>
|
||||
#include <linux/vmalloc.h>
|
||||
#include <net/netlink.h>
|
||||
|
||||
@@ -206,6 +215,8 @@ enum ip_set_feature {
|
||||
IPSET_TYPE_IP2 = (1 << IPSET_TYPE_IP2_FLAG),
|
||||
IPSET_TYPE_NAME_FLAG = 4,
|
||||
IPSET_TYPE_NAME = (1 << IPSET_TYPE_NAME_FLAG),
|
||||
IPSET_TYPE_IFACE_FLAG = 5,
|
||||
IPSET_TYPE_IFACE = (1 << IPSET_TYPE_IFACE_FLAG),
|
||||
/* Strictly speaking not a feature, but a flag for dumping:
|
||||
* this settype must be dumped last */
|
||||
IPSET_DUMP_LAST_FLAG = 7,
|
||||
@@ -214,7 +225,17 @@ enum ip_set_feature {
|
||||
|
||||
struct ip_set;
|
||||
|
||||
typedef int (*ipset_adtfn)(struct ip_set *set, void *value, u32 timeout);
|
||||
typedef int (*ipset_adtfn)(struct ip_set *set, void *value,
|
||||
u32 timeout, u32 flags);
|
||||
|
||||
/* Kernel API function options */
|
||||
struct ip_set_adt_opt {
|
||||
u8 family; /* Actual protocol family */
|
||||
u8 dim; /* Dimension of match/target */
|
||||
u8 flags; /* Direction and negation flags */
|
||||
u32 cmdflags; /* Command-like flags */
|
||||
u32 timeout; /* Timeout value */
|
||||
};
|
||||
|
||||
/* Set type, variant-specific part */
|
||||
struct ip_set_type_variant {
|
||||
@@ -223,14 +244,15 @@ struct ip_set_type_variant {
|
||||
* zero for no match/success to add/delete
|
||||
* positive for matching element */
|
||||
int (*kadt)(struct ip_set *set, const struct sk_buff * skb,
|
||||
enum ipset_adt adt, u8 pf, u8 dim, u8 flags);
|
||||
const struct xt_action_param *par,
|
||||
enum ipset_adt adt, const struct ip_set_adt_opt *opt);
|
||||
|
||||
/* Userspace: test/add/del entries
|
||||
* returns negative error code,
|
||||
* zero for no match/success to add/delete
|
||||
* positive for matching element */
|
||||
int (*uadt)(struct ip_set *set, struct nlattr *tb[],
|
||||
enum ipset_adt adt, u32 *lineno, u32 flags);
|
||||
enum ipset_adt adt, u32 *lineno, u32 flags, bool retried);
|
||||
|
||||
/* Low level add/del/test functions */
|
||||
ipset_adtfn adt[IPSET_ADT_MAX];
|
||||
@@ -268,8 +290,8 @@ struct ip_set_type {
|
||||
u8 dimension;
|
||||
/* Supported family: may be AF_UNSPEC for both AF_INET/AF_INET6 */
|
||||
u8 family;
|
||||
/* Type revision */
|
||||
u8 revision;
|
||||
/* Type revisions */
|
||||
u8 revision_min, revision_max;
|
||||
|
||||
/* Create set */
|
||||
int (*create)(struct ip_set *set, struct nlattr *tb[], u32 flags);
|
||||
@@ -300,6 +322,8 @@ struct ip_set {
|
||||
const struct ip_set_type_variant *variant;
|
||||
/* The actual INET family of the set */
|
||||
u8 family;
|
||||
/* The type revision */
|
||||
u8 revision;
|
||||
/* The type specific data */
|
||||
void *data;
|
||||
};
|
||||
@@ -307,21 +331,25 @@ struct ip_set {
|
||||
/* register and unregister set references */
|
||||
extern ip_set_id_t ip_set_get_byname(const char *name, struct ip_set **set);
|
||||
extern void ip_set_put_byindex(ip_set_id_t index);
|
||||
extern const char * ip_set_name_byindex(ip_set_id_t index);
|
||||
extern const char *ip_set_name_byindex(ip_set_id_t index);
|
||||
extern ip_set_id_t ip_set_nfnl_get(const char *name);
|
||||
extern ip_set_id_t ip_set_nfnl_get_byindex(ip_set_id_t index);
|
||||
extern void ip_set_nfnl_put(ip_set_id_t index);
|
||||
|
||||
/* API for iptables set match, and SET target */
|
||||
|
||||
extern int ip_set_add(ip_set_id_t id, const struct sk_buff *skb,
|
||||
u8 family, u8 dim, u8 flags);
|
||||
const struct xt_action_param *par,
|
||||
const struct ip_set_adt_opt *opt);
|
||||
extern int ip_set_del(ip_set_id_t id, const struct sk_buff *skb,
|
||||
u8 family, u8 dim, u8 flags);
|
||||
const struct xt_action_param *par,
|
||||
const struct ip_set_adt_opt *opt);
|
||||
extern int ip_set_test(ip_set_id_t id, const struct sk_buff *skb,
|
||||
u8 family, u8 dim, u8 flags);
|
||||
const struct xt_action_param *par,
|
||||
const struct ip_set_adt_opt *opt);
|
||||
|
||||
/* Utility functions */
|
||||
extern void * ip_set_alloc(size_t size);
|
||||
extern void *ip_set_alloc(size_t size);
|
||||
extern void ip_set_free(void *members);
|
||||
extern int ip_set_get_ipaddr4(struct nlattr *nla, __be32 *ipaddr);
|
||||
extern int ip_set_get_ipaddr6(struct nlattr *nla, union nf_inet_addr *ipaddr);
|
||||
@@ -331,7 +359,7 @@ ip_set_get_hostipaddr4(struct nlattr *nla, u32 *ipaddr)
|
||||
{
|
||||
__be32 ip;
|
||||
int ret = ip_set_get_ipaddr4(nla, &ip);
|
||||
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
*ipaddr = ntohl(ip);
|
||||
|
@@ -5,6 +5,11 @@
|
||||
#include <linux/jhash.h>
|
||||
#include <linux/netfilter/ipset/ip_set_timeout.h>
|
||||
|
||||
#define CONCAT(a, b, c) a##b##c
|
||||
#define TOKEN(a, b, c) CONCAT(a, b, c)
|
||||
|
||||
#define type_pf_next TOKEN(TYPE, PF, _elem)
|
||||
|
||||
/* Hashing which uses arrays to resolve clashing. The hash table is resized
|
||||
* (doubled) when searching becomes too long.
|
||||
* Internally jhash is used with the assumption that the size of the
|
||||
@@ -23,7 +28,32 @@
|
||||
/* Number of elements to store in an initial array block */
|
||||
#define AHASH_INIT_SIZE 4
|
||||
/* Max number of elements to store in an array block */
|
||||
#define AHASH_MAX_SIZE (3*4)
|
||||
#define AHASH_MAX_SIZE (3*AHASH_INIT_SIZE)
|
||||
|
||||
/* Max number of elements can be tuned */
|
||||
#ifdef IP_SET_HASH_WITH_MULTI
|
||||
#define AHASH_MAX(h) ((h)->ahash_max)
|
||||
|
||||
static inline u8
|
||||
tune_ahash_max(u8 curr, u32 multi)
|
||||
{
|
||||
u32 n;
|
||||
|
||||
if (multi < curr)
|
||||
return curr;
|
||||
|
||||
n = curr + AHASH_INIT_SIZE;
|
||||
/* Currently, at listing one hash bucket must fit into a message.
|
||||
* Therefore we have a hard limit here.
|
||||
*/
|
||||
return n > curr && n <= 64 ? n : curr;
|
||||
}
|
||||
#define TUNE_AHASH_MAX(h, multi) \
|
||||
((h)->ahash_max = tune_ahash_max((h)->ahash_max, multi))
|
||||
#else
|
||||
#define AHASH_MAX(h) AHASH_MAX_SIZE
|
||||
#define TUNE_AHASH_MAX(h, multi)
|
||||
#endif
|
||||
|
||||
/* A hash bucket */
|
||||
struct hbucket {
|
||||
@@ -38,7 +68,7 @@ struct htable {
|
||||
struct hbucket bucket[0]; /* hashtable buckets */
|
||||
};
|
||||
|
||||
#define hbucket(h, i) &((h)->bucket[i])
|
||||
#define hbucket(h, i) (&((h)->bucket[i]))
|
||||
|
||||
/* Book-keeping of the prefixes added to the set */
|
||||
struct ip_set_hash_nets {
|
||||
@@ -54,9 +84,16 @@ struct ip_set_hash {
|
||||
u32 initval; /* random jhash init value */
|
||||
u32 timeout; /* timeout value, if enabled */
|
||||
struct timer_list gc; /* garbage collection when timeout enabled */
|
||||
struct type_pf_next next; /* temporary storage for uadd */
|
||||
#ifdef IP_SET_HASH_WITH_MULTI
|
||||
u8 ahash_max; /* max elements in an array block */
|
||||
#endif
|
||||
#ifdef IP_SET_HASH_WITH_NETMASK
|
||||
u8 netmask; /* netmask value for subnets to store */
|
||||
#endif
|
||||
#ifdef IP_SET_HASH_WITH_RBTREE
|
||||
struct rb_root rbtree;
|
||||
#endif
|
||||
#ifdef IP_SET_HASH_WITH_NETS
|
||||
struct ip_set_hash_nets nets[0]; /* book-keeping of prefixes */
|
||||
#endif
|
||||
@@ -194,17 +231,24 @@ ip_set_hash_destroy(struct ip_set *set)
|
||||
del_timer_sync(&h->gc);
|
||||
|
||||
ahash_destroy(h->table);
|
||||
#ifdef IP_SET_HASH_WITH_RBTREE
|
||||
rbtree_destroy(&h->rbtree);
|
||||
#endif
|
||||
kfree(h);
|
||||
|
||||
set->data = NULL;
|
||||
}
|
||||
|
||||
#define HKEY(data, initval, htable_bits) \
|
||||
(jhash2((u32 *)(data), sizeof(struct type_pf_elem)/sizeof(u32), initval) \
|
||||
& jhash_mask(htable_bits))
|
||||
|
||||
#endif /* _IP_SET_AHASH_H */
|
||||
|
||||
#ifndef HKEY_DATALEN
|
||||
#define HKEY_DATALEN sizeof(struct type_pf_elem)
|
||||
#endif
|
||||
|
||||
#define HKEY(data, initval, htable_bits) \
|
||||
(jhash2((u32 *)(data), HKEY_DATALEN/sizeof(u32), initval) \
|
||||
& jhash_mask(htable_bits))
|
||||
|
||||
#define CONCAT(a, b, c) a##b##c
|
||||
#define TOKEN(a, b, c) CONCAT(a, b, c)
|
||||
|
||||
@@ -217,6 +261,7 @@ ip_set_hash_destroy(struct ip_set *set)
|
||||
#define type_pf_data_netmask TOKEN(TYPE, PF, _data_netmask)
|
||||
#define type_pf_data_list TOKEN(TYPE, PF, _data_list)
|
||||
#define type_pf_data_tlist TOKEN(TYPE, PF, _data_tlist)
|
||||
#define type_pf_data_next TOKEN(TYPE, PF, _data_next)
|
||||
|
||||
#define type_pf_elem TOKEN(TYPE, PF, _elem)
|
||||
#define type_pf_telem TOKEN(TYPE, PF, _telem)
|
||||
@@ -262,12 +307,13 @@ ip_set_hash_destroy(struct ip_set *set)
|
||||
/* Add an element to the hash table when resizing the set:
|
||||
* we spare the maintenance of the internal counters. */
|
||||
static int
|
||||
type_pf_elem_add(struct hbucket *n, const struct type_pf_elem *value)
|
||||
type_pf_elem_add(struct hbucket *n, const struct type_pf_elem *value,
|
||||
u8 ahash_max)
|
||||
{
|
||||
if (n->pos >= n->size) {
|
||||
void *tmp;
|
||||
|
||||
if (n->size >= AHASH_MAX_SIZE)
|
||||
if (n->size >= ahash_max)
|
||||
/* Trigger rehashing */
|
||||
return -EAGAIN;
|
||||
|
||||
@@ -322,7 +368,7 @@ retry:
|
||||
for (j = 0; j < n->pos; j++) {
|
||||
data = ahash_data(n, j);
|
||||
m = hbucket(t, HKEY(data, h->initval, htable_bits));
|
||||
ret = type_pf_elem_add(m, data);
|
||||
ret = type_pf_elem_add(m, data, AHASH_MAX(h));
|
||||
if (ret < 0) {
|
||||
read_unlock_bh(&set->lock);
|
||||
ahash_destroy(t);
|
||||
@@ -346,17 +392,20 @@ retry:
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void
|
||||
type_pf_data_next(struct ip_set_hash *h, const struct type_pf_elem *d);
|
||||
|
||||
/* Add an element to a hash and update the internal counters when succeeded,
|
||||
* otherwise report the proper error code. */
|
||||
static int
|
||||
type_pf_add(struct ip_set *set, void *value, u32 timeout)
|
||||
type_pf_add(struct ip_set *set, void *value, u32 timeout, u32 flags)
|
||||
{
|
||||
struct ip_set_hash *h = set->data;
|
||||
struct htable *t;
|
||||
const struct type_pf_elem *d = value;
|
||||
struct hbucket *n;
|
||||
int i, ret = 0;
|
||||
u32 key;
|
||||
u32 key, multi = 0;
|
||||
|
||||
if (h->elements >= h->maxelem)
|
||||
return -IPSET_ERR_HASH_FULL;
|
||||
@@ -366,14 +415,17 @@ type_pf_add(struct ip_set *set, void *value, u32 timeout)
|
||||
key = HKEY(value, h->initval, t->htable_bits);
|
||||
n = hbucket(t, key);
|
||||
for (i = 0; i < n->pos; i++)
|
||||
if (type_pf_data_equal(ahash_data(n, i), d)) {
|
||||
if (type_pf_data_equal(ahash_data(n, i), d, &multi)) {
|
||||
ret = -IPSET_ERR_EXIST;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = type_pf_elem_add(n, value);
|
||||
if (ret != 0)
|
||||
TUNE_AHASH_MAX(h, multi);
|
||||
ret = type_pf_elem_add(n, value, AHASH_MAX(h));
|
||||
if (ret != 0) {
|
||||
if (ret == -EAGAIN)
|
||||
type_pf_data_next(h, d);
|
||||
goto out;
|
||||
}
|
||||
|
||||
#ifdef IP_SET_HASH_WITH_NETS
|
||||
add_cidr(h, d->cidr, HOST_MASK);
|
||||
@@ -388,7 +440,7 @@ out:
|
||||
* and free up space if possible.
|
||||
*/
|
||||
static int
|
||||
type_pf_del(struct ip_set *set, void *value, u32 timeout)
|
||||
type_pf_del(struct ip_set *set, void *value, u32 timeout, u32 flags)
|
||||
{
|
||||
struct ip_set_hash *h = set->data;
|
||||
struct htable *t = h->table;
|
||||
@@ -396,13 +448,13 @@ type_pf_del(struct ip_set *set, void *value, u32 timeout)
|
||||
struct hbucket *n;
|
||||
int i;
|
||||
struct type_pf_elem *data;
|
||||
u32 key;
|
||||
u32 key, multi = 0;
|
||||
|
||||
key = HKEY(value, h->initval, t->htable_bits);
|
||||
n = hbucket(t, key);
|
||||
for (i = 0; i < n->pos; i++) {
|
||||
data = ahash_data(n, i);
|
||||
if (!type_pf_data_equal(data, d))
|
||||
if (!type_pf_data_equal(data, d, &multi))
|
||||
continue;
|
||||
if (i != n->pos - 1)
|
||||
/* Not last one */
|
||||
@@ -443,17 +495,17 @@ type_pf_test_cidrs(struct ip_set *set, struct type_pf_elem *d, u32 timeout)
|
||||
struct hbucket *n;
|
||||
const struct type_pf_elem *data;
|
||||
int i, j = 0;
|
||||
u32 key;
|
||||
u32 key, multi = 0;
|
||||
u8 host_mask = SET_HOST_MASK(set->family);
|
||||
|
||||
pr_debug("test by nets\n");
|
||||
for (; j < host_mask && h->nets[j].cidr; j++) {
|
||||
for (; j < host_mask && h->nets[j].cidr && !multi; j++) {
|
||||
type_pf_data_netmask(d, h->nets[j].cidr);
|
||||
key = HKEY(d, h->initval, t->htable_bits);
|
||||
n = hbucket(t, key);
|
||||
for (i = 0; i < n->pos; i++) {
|
||||
data = ahash_data(n, i);
|
||||
if (type_pf_data_equal(data, d))
|
||||
if (type_pf_data_equal(data, d, &multi))
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -463,7 +515,7 @@ type_pf_test_cidrs(struct ip_set *set, struct type_pf_elem *d, u32 timeout)
|
||||
|
||||
/* Test whether the element is added to the set */
|
||||
static int
|
||||
type_pf_test(struct ip_set *set, void *value, u32 timeout)
|
||||
type_pf_test(struct ip_set *set, void *value, u32 timeout, u32 flags)
|
||||
{
|
||||
struct ip_set_hash *h = set->data;
|
||||
struct htable *t = h->table;
|
||||
@@ -471,7 +523,7 @@ type_pf_test(struct ip_set *set, void *value, u32 timeout)
|
||||
struct hbucket *n;
|
||||
const struct type_pf_elem *data;
|
||||
int i;
|
||||
u32 key;
|
||||
u32 key, multi = 0;
|
||||
|
||||
#ifdef IP_SET_HASH_WITH_NETS
|
||||
/* If we test an IP address and not a network address,
|
||||
@@ -484,7 +536,7 @@ type_pf_test(struct ip_set *set, void *value, u32 timeout)
|
||||
n = hbucket(t, key);
|
||||
for (i = 0; i < n->pos; i++) {
|
||||
data = ahash_data(n, i);
|
||||
if (type_pf_data_equal(data, d))
|
||||
if (type_pf_data_equal(data, d, &multi))
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
@@ -586,10 +638,11 @@ nla_put_failure:
|
||||
|
||||
static int
|
||||
type_pf_kadt(struct ip_set *set, const struct sk_buff * skb,
|
||||
enum ipset_adt adt, u8 pf, u8 dim, u8 flags);
|
||||
const struct xt_action_param *par,
|
||||
enum ipset_adt adt, const struct ip_set_adt_opt *opt);
|
||||
static int
|
||||
type_pf_uadt(struct ip_set *set, struct nlattr *tb[],
|
||||
enum ipset_adt adt, u32 *lineno, u32 flags);
|
||||
enum ipset_adt adt, u32 *lineno, u32 flags, bool retried);
|
||||
|
||||
static const struct ip_set_type_variant type_pf_variant = {
|
||||
.kadt = type_pf_kadt,
|
||||
@@ -640,14 +693,14 @@ type_pf_data_timeout_set(struct type_pf_elem *data, u32 timeout)
|
||||
|
||||
static int
|
||||
type_pf_elem_tadd(struct hbucket *n, const struct type_pf_elem *value,
|
||||
u32 timeout)
|
||||
u8 ahash_max, u32 timeout)
|
||||
{
|
||||
struct type_pf_elem *data;
|
||||
|
||||
if (n->pos >= n->size) {
|
||||
void *tmp;
|
||||
|
||||
if (n->size >= AHASH_MAX_SIZE)
|
||||
if (n->size >= ahash_max)
|
||||
/* Trigger rehashing */
|
||||
return -EAGAIN;
|
||||
|
||||
@@ -752,7 +805,7 @@ retry:
|
||||
for (j = 0; j < n->pos; j++) {
|
||||
data = ahash_tdata(n, j);
|
||||
m = hbucket(t, HKEY(data, h->initval, htable_bits));
|
||||
ret = type_pf_elem_tadd(m, data,
|
||||
ret = type_pf_elem_tadd(m, data, AHASH_MAX(h),
|
||||
type_pf_data_timeout(data));
|
||||
if (ret < 0) {
|
||||
read_unlock_bh(&set->lock);
|
||||
@@ -776,15 +829,16 @@ retry:
|
||||
}
|
||||
|
||||
static int
|
||||
type_pf_tadd(struct ip_set *set, void *value, u32 timeout)
|
||||
type_pf_tadd(struct ip_set *set, void *value, u32 timeout, u32 flags)
|
||||
{
|
||||
struct ip_set_hash *h = set->data;
|
||||
struct htable *t = h->table;
|
||||
const struct type_pf_elem *d = value;
|
||||
struct hbucket *n;
|
||||
struct type_pf_elem *data;
|
||||
int ret = 0, i, j = AHASH_MAX_SIZE + 1;
|
||||
u32 key;
|
||||
int ret = 0, i, j = AHASH_MAX(h) + 1;
|
||||
bool flag_exist = flags & IPSET_FLAG_EXIST;
|
||||
u32 key, multi = 0;
|
||||
|
||||
if (h->elements >= h->maxelem)
|
||||
/* FIXME: when set is full, we slow down here */
|
||||
@@ -798,18 +852,18 @@ type_pf_tadd(struct ip_set *set, void *value, u32 timeout)
|
||||
n = hbucket(t, key);
|
||||
for (i = 0; i < n->pos; i++) {
|
||||
data = ahash_tdata(n, i);
|
||||
if (type_pf_data_equal(data, d)) {
|
||||
if (type_pf_data_expired(data))
|
||||
if (type_pf_data_equal(data, d, &multi)) {
|
||||
if (type_pf_data_expired(data) || flag_exist)
|
||||
j = i;
|
||||
else {
|
||||
ret = -IPSET_ERR_EXIST;
|
||||
goto out;
|
||||
}
|
||||
} else if (j == AHASH_MAX_SIZE + 1 &&
|
||||
} else if (j == AHASH_MAX(h) + 1 &&
|
||||
type_pf_data_expired(data))
|
||||
j = i;
|
||||
}
|
||||
if (j != AHASH_MAX_SIZE + 1) {
|
||||
if (j != AHASH_MAX(h) + 1) {
|
||||
data = ahash_tdata(n, j);
|
||||
#ifdef IP_SET_HASH_WITH_NETS
|
||||
del_cidr(h, data->cidr, HOST_MASK);
|
||||
@@ -819,9 +873,13 @@ type_pf_tadd(struct ip_set *set, void *value, u32 timeout)
|
||||
type_pf_data_timeout_set(data, timeout);
|
||||
goto out;
|
||||
}
|
||||
ret = type_pf_elem_tadd(n, d, timeout);
|
||||
if (ret != 0)
|
||||
TUNE_AHASH_MAX(h, multi);
|
||||
ret = type_pf_elem_tadd(n, d, AHASH_MAX(h), timeout);
|
||||
if (ret != 0) {
|
||||
if (ret == -EAGAIN)
|
||||
type_pf_data_next(h, d);
|
||||
goto out;
|
||||
}
|
||||
|
||||
#ifdef IP_SET_HASH_WITH_NETS
|
||||
add_cidr(h, d->cidr, HOST_MASK);
|
||||
@@ -833,7 +891,7 @@ out:
|
||||
}
|
||||
|
||||
static int
|
||||
type_pf_tdel(struct ip_set *set, void *value, u32 timeout)
|
||||
type_pf_tdel(struct ip_set *set, void *value, u32 timeout, u32 flags)
|
||||
{
|
||||
struct ip_set_hash *h = set->data;
|
||||
struct htable *t = h->table;
|
||||
@@ -841,13 +899,13 @@ type_pf_tdel(struct ip_set *set, void *value, u32 timeout)
|
||||
struct hbucket *n;
|
||||
int i;
|
||||
struct type_pf_elem *data;
|
||||
u32 key;
|
||||
u32 key, multi = 0;
|
||||
|
||||
key = HKEY(value, h->initval, t->htable_bits);
|
||||
n = hbucket(t, key);
|
||||
for (i = 0; i < n->pos; i++) {
|
||||
data = ahash_tdata(n, i);
|
||||
if (!type_pf_data_equal(data, d))
|
||||
if (!type_pf_data_equal(data, d, &multi))
|
||||
continue;
|
||||
if (type_pf_data_expired(data))
|
||||
return -IPSET_ERR_EXIST;
|
||||
@@ -887,16 +945,16 @@ type_pf_ttest_cidrs(struct ip_set *set, struct type_pf_elem *d, u32 timeout)
|
||||
struct type_pf_elem *data;
|
||||
struct hbucket *n;
|
||||
int i, j = 0;
|
||||
u32 key;
|
||||
u32 key, multi = 0;
|
||||
u8 host_mask = SET_HOST_MASK(set->family);
|
||||
|
||||
for (; j < host_mask && h->nets[j].cidr; j++) {
|
||||
for (; j < host_mask && h->nets[j].cidr && !multi; j++) {
|
||||
type_pf_data_netmask(d, h->nets[j].cidr);
|
||||
key = HKEY(d, h->initval, t->htable_bits);
|
||||
n = hbucket(t, key);
|
||||
for (i = 0; i < n->pos; i++) {
|
||||
data = ahash_tdata(n, i);
|
||||
if (type_pf_data_equal(data, d))
|
||||
if (type_pf_data_equal(data, d, &multi))
|
||||
return !type_pf_data_expired(data);
|
||||
}
|
||||
}
|
||||
@@ -905,14 +963,14 @@ type_pf_ttest_cidrs(struct ip_set *set, struct type_pf_elem *d, u32 timeout)
|
||||
#endif
|
||||
|
||||
static int
|
||||
type_pf_ttest(struct ip_set *set, void *value, u32 timeout)
|
||||
type_pf_ttest(struct ip_set *set, void *value, u32 timeout, u32 flags)
|
||||
{
|
||||
struct ip_set_hash *h = set->data;
|
||||
struct htable *t = h->table;
|
||||
struct type_pf_elem *data, *d = value;
|
||||
struct hbucket *n;
|
||||
int i;
|
||||
u32 key;
|
||||
u32 key, multi = 0;
|
||||
|
||||
#ifdef IP_SET_HASH_WITH_NETS
|
||||
if (d->cidr == SET_HOST_MASK(set->family))
|
||||
@@ -922,7 +980,7 @@ type_pf_ttest(struct ip_set *set, void *value, u32 timeout)
|
||||
n = hbucket(t, key);
|
||||
for (i = 0; i < n->pos; i++) {
|
||||
data = ahash_tdata(n, i);
|
||||
if (type_pf_data_equal(data, d))
|
||||
if (type_pf_data_equal(data, d, &multi))
|
||||
return !type_pf_data_expired(data);
|
||||
}
|
||||
return 0;
|
||||
@@ -1030,6 +1088,8 @@ type_pf_gc_init(struct ip_set *set)
|
||||
IPSET_GC_PERIOD(h->timeout));
|
||||
}
|
||||
|
||||
#undef HKEY_DATALEN
|
||||
#undef HKEY
|
||||
#undef type_pf_data_equal
|
||||
#undef type_pf_data_isnull
|
||||
#undef type_pf_data_copy
|
||||
|
@@ -11,6 +11,10 @@ enum {
|
||||
IPSET_ERR_INVALID_PROTO,
|
||||
/* Protocol missing but must be specified */
|
||||
IPSET_ERR_MISSING_PROTO,
|
||||
/* Range not supported */
|
||||
IPSET_ERR_HASH_RANGE_UNSUPPORTED,
|
||||
/* Invalid range */
|
||||
IPSET_ERR_HASH_RANGE,
|
||||
};
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
@@ -22,6 +22,9 @@
|
||||
|
||||
#define with_timeout(timeout) ((timeout) != IPSET_NO_TIMEOUT)
|
||||
|
||||
#define opt_timeout(opt, map) \
|
||||
(with_timeout((opt)->timeout) ? (opt)->timeout : (map)->timeout)
|
||||
|
||||
static inline unsigned int
|
||||
ip_set_timeout_uget(struct nlattr *tb)
|
||||
{
|
||||
@@ -75,7 +78,7 @@ ip_set_timeout_set(u32 timeout)
|
||||
static inline u32
|
||||
ip_set_timeout_get(unsigned long timeout)
|
||||
{
|
||||
return timeout == IPSET_ELEM_PERMANENT ? 0 :
|
||||
return timeout == IPSET_ELEM_PERMANENT ? 0 :
|
||||
jiffies_to_msecs(timeout - jiffies)/1000;
|
||||
}
|
||||
|
||||
|
@@ -2,7 +2,8 @@
|
||||
#define _PFXLEN_H
|
||||
|
||||
#include <asm/byteorder.h>
|
||||
#include <linux/netfilter.h>
|
||||
#include <linux/netfilter.h>
|
||||
#include <net/tcp.h>
|
||||
|
||||
/* Prefixlen maps, by Jan Engelhardt */
|
||||
extern const union nf_inet_addr ip_set_netmask_map[];
|
||||
@@ -32,4 +33,12 @@ ip_set_hostmask6(u8 pfxlen)
|
||||
return &ip_set_hostmask_map[pfxlen].ip6[0];
|
||||
}
|
||||
|
||||
extern u32 ip_set_range_to_cidr(u32 from, u32 to, u8 *cidr);
|
||||
|
||||
#define ip_set_mask_from_to(from, to, cidr) \
|
||||
do { \
|
||||
from &= ip_set_hostmask(cidr); \
|
||||
to = from | ~ip_set_hostmask(cidr); \
|
||||
} while (0)
|
||||
|
||||
#endif /*_PFXLEN_H */
|
||||
|
@@ -60,6 +60,9 @@ struct nfnl_callback {
|
||||
int (*call)(struct sock *nl, struct sk_buff *skb,
|
||||
const struct nlmsghdr *nlh,
|
||||
const struct nlattr * const cda[]);
|
||||
int (*call_rcu)(struct sock *nl, struct sk_buff *skb,
|
||||
const struct nlmsghdr *nlh,
|
||||
const struct nlattr * const cda[]);
|
||||
const struct nla_policy *policy; /* netlink attribute policy */
|
||||
const u_int16_t attr_count; /* number of nlattr's */
|
||||
};
|
||||
|
@@ -8,6 +8,7 @@ enum nfqnl_msg_types {
|
||||
NFQNL_MSG_PACKET, /* packet from kernel to userspace */
|
||||
NFQNL_MSG_VERDICT, /* verdict from userspace to kernel */
|
||||
NFQNL_MSG_CONFIG, /* connect to a particular queue */
|
||||
NFQNL_MSG_VERDICT_BATCH, /* batchv from userspace to kernel */
|
||||
|
||||
NFQNL_MSG_MAX
|
||||
};
|
||||
|
@@ -35,7 +35,7 @@ struct xt_set_info_target_v0 {
|
||||
struct xt_set_info_v0 del_set;
|
||||
};
|
||||
|
||||
/* Revision 1: current interface to netfilter/iptables */
|
||||
/* Revision 1 match and target */
|
||||
|
||||
struct xt_set_info {
|
||||
ip_set_id_t index;
|
||||
@@ -44,13 +44,22 @@ struct xt_set_info {
|
||||
};
|
||||
|
||||
/* match and target infos */
|
||||
struct xt_set_info_match {
|
||||
struct xt_set_info_match_v1 {
|
||||
struct xt_set_info match_set;
|
||||
};
|
||||
|
||||
struct xt_set_info_target {
|
||||
struct xt_set_info_target_v1 {
|
||||
struct xt_set_info add_set;
|
||||
struct xt_set_info del_set;
|
||||
};
|
||||
|
||||
/* Revision 2 target */
|
||||
|
||||
struct xt_set_info_target_v2 {
|
||||
struct xt_set_info add_set;
|
||||
struct xt_set_info del_set;
|
||||
u32 flags;
|
||||
u32 timeout;
|
||||
};
|
||||
|
||||
#endif /*_XT_SET_H*/
|
||||
|
@@ -49,6 +49,7 @@ struct nlmsghdr {
|
||||
#define NLM_F_MULTI 2 /* Multipart message, terminated by NLMSG_DONE */
|
||||
#define NLM_F_ACK 4 /* Reply with ack, with zero or error code */
|
||||
#define NLM_F_ECHO 8 /* Echo this request */
|
||||
#define NLM_F_DUMP_INTR 16 /* Dump was inconsistent due to sequence change */
|
||||
|
||||
/* Modifiers to GET request */
|
||||
#define NLM_F_ROOT 0x100 /* specify tree root */
|
||||
@@ -221,7 +222,9 @@ struct netlink_callback {
|
||||
int (*dump)(struct sk_buff * skb,
|
||||
struct netlink_callback *cb);
|
||||
int (*done)(struct netlink_callback *cb);
|
||||
int family;
|
||||
u16 family;
|
||||
u16 min_dump_alloc;
|
||||
unsigned int prev_seq, seq;
|
||||
long args[6];
|
||||
};
|
||||
|
||||
@@ -259,7 +262,8 @@ __nlmsg_put(struct sk_buff *skb, u32 pid, u32 seq, int type, int len, int flags)
|
||||
extern int netlink_dump_start(struct sock *ssk, struct sk_buff *skb,
|
||||
const struct nlmsghdr *nlh,
|
||||
int (*dump)(struct sk_buff *skb, struct netlink_callback*),
|
||||
int (*done)(struct netlink_callback*));
|
||||
int (*done)(struct netlink_callback*),
|
||||
u16 min_dump_alloc);
|
||||
|
||||
|
||||
#define NL_NONROOT_RECV 0x1
|
||||
|
@@ -40,8 +40,6 @@ struct netpoll_info {
|
||||
struct netpoll *netpoll;
|
||||
};
|
||||
|
||||
void netpoll_poll_dev(struct net_device *dev);
|
||||
void netpoll_poll(struct netpoll *np);
|
||||
void netpoll_send_udp(struct netpoll *np, const char *msg, int len);
|
||||
void netpoll_print_options(struct netpoll *np);
|
||||
int netpoll_parse_options(struct netpoll *np, char *opt);
|
||||
|
126
include/linux/nfc.h
Normal file
126
include/linux/nfc.h
Normal file
@@ -0,0 +1,126 @@
|
||||
/*
|
||||
* Copyright (C) 2011 Instituto Nokia de Tecnologia
|
||||
*
|
||||
* Authors:
|
||||
* Lauro Ramos Venancio <lauro.venancio@openbossa.org>
|
||||
* Aloisio Almeida Jr <aloisio.almeida@openbossa.org>
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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.,
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_NFC_H
|
||||
#define __LINUX_NFC_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/socket.h>
|
||||
|
||||
#define NFC_GENL_NAME "nfc"
|
||||
#define NFC_GENL_VERSION 1
|
||||
|
||||
#define NFC_GENL_MCAST_EVENT_NAME "events"
|
||||
|
||||
/**
|
||||
* enum nfc_commands - supported nfc commands
|
||||
*
|
||||
* @NFC_CMD_UNSPEC: unspecified command
|
||||
*
|
||||
* @NFC_CMD_GET_DEVICE: request information about a device (requires
|
||||
* %NFC_ATTR_DEVICE_INDEX) or dump request to get a list of all nfc devices
|
||||
* @NFC_CMD_START_POLL: start polling for targets using the given protocols
|
||||
* (requires %NFC_ATTR_DEVICE_INDEX and %NFC_ATTR_PROTOCOLS)
|
||||
* @NFC_CMD_STOP_POLL: stop polling for targets (requires
|
||||
* %NFC_ATTR_DEVICE_INDEX)
|
||||
* @NFC_CMD_GET_TARGET: dump all targets found by the previous poll (requires
|
||||
* %NFC_ATTR_DEVICE_INDEX)
|
||||
* @NFC_EVENT_TARGETS_FOUND: event emitted when a new target is found
|
||||
* (it sends %NFC_ATTR_DEVICE_INDEX)
|
||||
* @NFC_EVENT_DEVICE_ADDED: event emitted when a new device is registred
|
||||
* (it sends %NFC_ATTR_DEVICE_NAME, %NFC_ATTR_DEVICE_INDEX and
|
||||
* %NFC_ATTR_PROTOCOLS)
|
||||
* @NFC_EVENT_DEVICE_REMOVED: event emitted when a device is removed
|
||||
* (it sends %NFC_ATTR_DEVICE_INDEX)
|
||||
*/
|
||||
enum nfc_commands {
|
||||
NFC_CMD_UNSPEC,
|
||||
NFC_CMD_GET_DEVICE,
|
||||
NFC_CMD_START_POLL,
|
||||
NFC_CMD_STOP_POLL,
|
||||
NFC_CMD_GET_TARGET,
|
||||
NFC_EVENT_TARGETS_FOUND,
|
||||
NFC_EVENT_DEVICE_ADDED,
|
||||
NFC_EVENT_DEVICE_REMOVED,
|
||||
/* private: internal use only */
|
||||
__NFC_CMD_AFTER_LAST
|
||||
};
|
||||
#define NFC_CMD_MAX (__NFC_CMD_AFTER_LAST - 1)
|
||||
|
||||
/**
|
||||
* enum nfc_attrs - supported nfc attributes
|
||||
*
|
||||
* @NFC_ATTR_UNSPEC: unspecified attribute
|
||||
*
|
||||
* @NFC_ATTR_DEVICE_INDEX: index of nfc device
|
||||
* @NFC_ATTR_DEVICE_NAME: device name, max 8 chars
|
||||
* @NFC_ATTR_PROTOCOLS: nfc protocols - bitwise or-ed combination from
|
||||
* NFC_PROTO_*_MASK constants
|
||||
* @NFC_ATTR_TARGET_INDEX: index of the nfc target
|
||||
* @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)
|
||||
*/
|
||||
enum nfc_attrs {
|
||||
NFC_ATTR_UNSPEC,
|
||||
NFC_ATTR_DEVICE_INDEX,
|
||||
NFC_ATTR_DEVICE_NAME,
|
||||
NFC_ATTR_PROTOCOLS,
|
||||
NFC_ATTR_TARGET_INDEX,
|
||||
NFC_ATTR_TARGET_SENS_RES,
|
||||
NFC_ATTR_TARGET_SEL_RES,
|
||||
/* private: internal use only */
|
||||
__NFC_ATTR_AFTER_LAST
|
||||
};
|
||||
#define NFC_ATTR_MAX (__NFC_ATTR_AFTER_LAST - 1)
|
||||
|
||||
#define NFC_DEVICE_NAME_MAXSIZE 8
|
||||
|
||||
/* NFC protocols */
|
||||
#define NFC_PROTO_JEWEL 1
|
||||
#define NFC_PROTO_MIFARE 2
|
||||
#define NFC_PROTO_FELICA 3
|
||||
#define NFC_PROTO_ISO14443 4
|
||||
#define NFC_PROTO_NFC_DEP 5
|
||||
|
||||
#define NFC_PROTO_MAX 6
|
||||
|
||||
/* NFC protocols masks used in bitsets */
|
||||
#define NFC_PROTO_JEWEL_MASK (1 << NFC_PROTO_JEWEL)
|
||||
#define NFC_PROTO_MIFARE_MASK (1 << NFC_PROTO_MIFARE)
|
||||
#define NFC_PROTO_FELICA_MASK (1 << NFC_PROTO_FELICA)
|
||||
#define NFC_PROTO_ISO14443_MASK (1 << NFC_PROTO_ISO14443)
|
||||
#define NFC_PROTO_NFC_DEP_MASK (1 << NFC_PROTO_NFC_DEP)
|
||||
|
||||
struct sockaddr_nfc {
|
||||
sa_family_t sa_family;
|
||||
__u32 dev_idx;
|
||||
__u32 target_idx;
|
||||
__u32 nfc_protocol;
|
||||
};
|
||||
|
||||
/* NFC socket protocols */
|
||||
#define NFC_SOCKPROTO_RAW 0
|
||||
#define NFC_SOCKPROTO_MAX 1
|
||||
|
||||
#endif /*__LINUX_NFC_H */
|
@@ -247,7 +247,8 @@
|
||||
* passed, all channels allowed for the current regulatory domain
|
||||
* are used. Extra IEs can also be passed from the userspace by
|
||||
* using the %NL80211_ATTR_IE attribute.
|
||||
* @NL80211_CMD_STOP_SCHED_SCAN: stop a scheduled scan
|
||||
* @NL80211_CMD_STOP_SCHED_SCAN: stop a scheduled scan. Returns -ENOENT
|
||||
* if scheduled scan is not running.
|
||||
* @NL80211_CMD_SCHED_SCAN_RESULTS: indicates that there are scheduled scan
|
||||
* results available.
|
||||
* @NL80211_CMD_SCHED_SCAN_STOPPED: indicates that the scheduled scan has
|
||||
@@ -483,6 +484,14 @@
|
||||
* more background information, see
|
||||
* http://wireless.kernel.org/en/users/Documentation/WoWLAN.
|
||||
*
|
||||
* @NL80211_CMD_SET_REKEY_OFFLOAD: This command is used give the driver
|
||||
* the necessary information for supporting GTK rekey offload. This
|
||||
* feature is typically used during WoWLAN. The configuration data
|
||||
* is contained in %NL80211_ATTR_REKEY_DATA (which is nested and
|
||||
* contains the data in sub-attributes). After rekeying happened,
|
||||
* this command may also be sent by the driver as an MLME event to
|
||||
* inform userspace of the new replay counter.
|
||||
*
|
||||
* @NL80211_CMD_MAX: highest used command number
|
||||
* @__NL80211_CMD_AFTER_LAST: internal use
|
||||
*/
|
||||
@@ -605,6 +614,8 @@ enum nl80211_commands {
|
||||
NL80211_CMD_SCHED_SCAN_RESULTS,
|
||||
NL80211_CMD_SCHED_SCAN_STOPPED,
|
||||
|
||||
NL80211_CMD_SET_REKEY_OFFLOAD,
|
||||
|
||||
/* add new commands above here */
|
||||
|
||||
/* used to define NL80211_CMD_MAX below */
|
||||
@@ -996,6 +1007,9 @@ enum nl80211_commands {
|
||||
* are managed in software: interfaces of these types aren't subject to
|
||||
* any restrictions in their number or combinations.
|
||||
*
|
||||
* @%NL80211_ATTR_REKEY_DATA: nested attribute containing the information
|
||||
* necessary for GTK rekeying in the device, see &enum nl80211_rekey_data.
|
||||
*
|
||||
* @NL80211_ATTR_MAX: highest attribute number currently defined
|
||||
* @__NL80211_ATTR_AFTER_LAST: internal use
|
||||
*/
|
||||
@@ -1194,6 +1208,8 @@ enum nl80211_attrs {
|
||||
NL80211_ATTR_INTERFACE_COMBINATIONS,
|
||||
NL80211_ATTR_SOFTWARE_IFTYPES,
|
||||
|
||||
NL80211_ATTR_REKEY_DATA,
|
||||
|
||||
/* add attributes here, update the policy in nl80211.c */
|
||||
|
||||
__NL80211_ATTR_AFTER_LAST,
|
||||
@@ -2361,4 +2377,28 @@ enum nl80211_plink_state {
|
||||
MAX_NL80211_PLINK_STATES = NUM_NL80211_PLINK_STATES - 1
|
||||
};
|
||||
|
||||
#define NL80211_KCK_LEN 16
|
||||
#define NL80211_KEK_LEN 16
|
||||
#define NL80211_REPLAY_CTR_LEN 8
|
||||
|
||||
/**
|
||||
* enum nl80211_rekey_data - attributes for GTK rekey offload
|
||||
* @__NL80211_REKEY_DATA_INVALID: invalid number for nested attributes
|
||||
* @NL80211_REKEY_DATA_KEK: key encryption key (binary)
|
||||
* @NL80211_REKEY_DATA_KCK: key confirmation key (binary)
|
||||
* @NL80211_REKEY_DATA_REPLAY_CTR: replay counter (binary)
|
||||
* @NUM_NL80211_REKEY_DATA: number of rekey attributes (internal)
|
||||
* @MAX_NL80211_REKEY_DATA: highest rekey attribute (internal)
|
||||
*/
|
||||
enum nl80211_rekey_data {
|
||||
__NL80211_REKEY_DATA_INVALID,
|
||||
NL80211_REKEY_DATA_KEK,
|
||||
NL80211_REKEY_DATA_KCK,
|
||||
NL80211_REKEY_DATA_REPLAY_CTR,
|
||||
|
||||
/* keep last */
|
||||
NUM_NL80211_REKEY_DATA,
|
||||
MAX_NL80211_REKEY_DATA = NUM_NL80211_REKEY_DATA - 1
|
||||
};
|
||||
|
||||
#endif /* __LINUX_NL80211_H */
|
||||
|
@@ -2103,6 +2103,9 @@
|
||||
#define PCI_DEVICE_ID_TIGON3_5761E 0x1680
|
||||
#define PCI_DEVICE_ID_TIGON3_5761 0x1681
|
||||
#define PCI_DEVICE_ID_TIGON3_5764 0x1684
|
||||
#define PCI_DEVICE_ID_NX2_57800 0x168a
|
||||
#define PCI_DEVICE_ID_NX2_57840 0x168d
|
||||
#define PCI_DEVICE_ID_NX2_57810 0x168e
|
||||
#define PCI_DEVICE_ID_TIGON3_5787M 0x1693
|
||||
#define PCI_DEVICE_ID_TIGON3_5782 0x1696
|
||||
#define PCI_DEVICE_ID_TIGON3_5784 0x1698
|
||||
@@ -2110,11 +2113,17 @@
|
||||
#define PCI_DEVICE_ID_TIGON3_5787 0x169b
|
||||
#define PCI_DEVICE_ID_TIGON3_5788 0x169c
|
||||
#define PCI_DEVICE_ID_TIGON3_5789 0x169d
|
||||
#define PCI_DEVICE_ID_NX2_57800_MF 0x16a5
|
||||
#define PCI_DEVICE_ID_TIGON3_5702X 0x16a6
|
||||
#define PCI_DEVICE_ID_TIGON3_5703X 0x16a7
|
||||
#define PCI_DEVICE_ID_TIGON3_5704S 0x16a8
|
||||
#define PCI_DEVICE_ID_NX2_57800_VF 0x16a9
|
||||
#define PCI_DEVICE_ID_NX2_5706S 0x16aa
|
||||
#define PCI_DEVICE_ID_NX2_57840_MF 0x16ab
|
||||
#define PCI_DEVICE_ID_NX2_5708S 0x16ac
|
||||
#define PCI_DEVICE_ID_NX2_57840_VF 0x16ad
|
||||
#define PCI_DEVICE_ID_NX2_57810_MF 0x16ae
|
||||
#define PCI_DEVICE_ID_NX2_57810_VF 0x16af
|
||||
#define PCI_DEVICE_ID_TIGON3_5702A3 0x16c6
|
||||
#define PCI_DEVICE_ID_TIGON3_5703A3 0x16c7
|
||||
#define PCI_DEVICE_ID_TIGON3_5781 0x16dd
|
||||
|
@@ -58,6 +58,7 @@ extern void get_random_bytes(void *buf, int nbytes);
|
||||
void generate_random_uuid(unsigned char uuid_out[16]);
|
||||
|
||||
extern __u32 secure_ip_id(__be32 daddr);
|
||||
extern __u32 secure_ipv6_id(const __be32 daddr[4]);
|
||||
extern u32 secure_ipv4_port_ephemeral(__be32 saddr, __be32 daddr, __be16 dport);
|
||||
extern u32 secure_ipv6_port_ephemeral(const __be32 *saddr, const __be32 *daddr,
|
||||
__be16 dport);
|
||||
|
@@ -585,6 +585,8 @@ enum rtnetlink_groups {
|
||||
#define RTNLGRP_PHONET_IFADDR RTNLGRP_PHONET_IFADDR
|
||||
RTNLGRP_PHONET_ROUTE,
|
||||
#define RTNLGRP_PHONET_ROUTE RTNLGRP_PHONET_ROUTE
|
||||
RTNLGRP_DCB,
|
||||
#define RTNLGRP_DCB RTNLGRP_DCB
|
||||
__RTNLGRP_MAX
|
||||
};
|
||||
#define RTNLGRP_MAX (__RTNLGRP_MAX - 1)
|
||||
|
@@ -187,6 +187,20 @@ enum {
|
||||
|
||||
/* ensure the originating sk reference is available on driver level */
|
||||
SKBTX_DRV_NEEDS_SK_REF = 1 << 3,
|
||||
|
||||
/* device driver supports TX zero-copy buffers */
|
||||
SKBTX_DEV_ZEROCOPY = 1 << 4,
|
||||
};
|
||||
|
||||
/*
|
||||
* The callback notifies userspace to release buffers when skb DMA is done in
|
||||
* lower device, the skb last reference should be 0 when calling this.
|
||||
* The desc is used to track userspace buffer index.
|
||||
*/
|
||||
struct ubuf_info {
|
||||
void (*callback)(void *);
|
||||
void *arg;
|
||||
unsigned long desc;
|
||||
};
|
||||
|
||||
/* This data is invariant across clones and lives at
|
||||
@@ -211,6 +225,7 @@ struct skb_shared_info {
|
||||
/* Intermediate layers must ensure that destructor_arg
|
||||
* remains valid until skb destructor */
|
||||
void * destructor_arg;
|
||||
|
||||
/* must be last field, see pskb_expand_head() */
|
||||
skb_frag_t frags[MAX_SKB_FRAGS];
|
||||
};
|
||||
@@ -270,15 +285,12 @@ typedef unsigned char *sk_buff_data_t;
|
||||
* struct sk_buff - socket buffer
|
||||
* @next: Next buffer in list
|
||||
* @prev: Previous buffer in list
|
||||
* @sk: Socket we are owned by
|
||||
* @tstamp: Time we arrived
|
||||
* @sk: Socket we are owned by
|
||||
* @dev: Device we arrived on/are leaving by
|
||||
* @transport_header: Transport layer header
|
||||
* @network_header: Network layer header
|
||||
* @mac_header: Link layer header
|
||||
* @cb: Control buffer. Free for use by every layer. Put private vars here
|
||||
* @_skb_refdst: destination entry (with norefcount bit)
|
||||
* @sp: the security path, used for xfrm
|
||||
* @cb: Control buffer. Free for use by every layer. Put private vars here
|
||||
* @len: Length of actual data
|
||||
* @data_len: Data length
|
||||
* @mac_len: Length of link layer header
|
||||
@@ -286,40 +298,45 @@ typedef unsigned char *sk_buff_data_t;
|
||||
* @csum: Checksum (must include start/offset pair)
|
||||
* @csum_start: Offset from skb->head where checksumming should start
|
||||
* @csum_offset: Offset from csum_start where checksum should be stored
|
||||
* @priority: Packet queueing priority
|
||||
* @local_df: allow local fragmentation
|
||||
* @cloned: Head may be cloned (check refcnt to be sure)
|
||||
* @ip_summed: Driver fed us an IP checksum
|
||||
* @nohdr: Payload reference only, must not modify header
|
||||
* @nfctinfo: Relationship of this skb to the connection
|
||||
* @pkt_type: Packet class
|
||||
* @fclone: skbuff clone status
|
||||
* @ip_summed: Driver fed us an IP checksum
|
||||
* @priority: Packet queueing priority
|
||||
* @users: User count - see {datagram,tcp}.c
|
||||
* @protocol: Packet protocol from driver
|
||||
* @truesize: Buffer size
|
||||
* @head: Head of buffer
|
||||
* @data: Data head pointer
|
||||
* @tail: Tail pointer
|
||||
* @end: End pointer
|
||||
* @destructor: Destruct function
|
||||
* @mark: Generic packet mark
|
||||
* @nfct: Associated connection, if any
|
||||
* @ipvs_property: skbuff is owned by ipvs
|
||||
* @peeked: this packet has been seen already, so stats have been
|
||||
* done for it, don't do them again
|
||||
* @nf_trace: netfilter packet trace flag
|
||||
* @nfctinfo: Relationship of this skb to the connection
|
||||
* @protocol: Packet protocol from driver
|
||||
* @destructor: Destruct function
|
||||
* @nfct: Associated connection, if any
|
||||
* @nfct_reasm: netfilter conntrack re-assembly pointer
|
||||
* @nf_bridge: Saved data about a bridged frame - see br_netfilter.c
|
||||
* @skb_iif: ifindex of device we arrived on
|
||||
* @rxhash: the packet hash computed on receive
|
||||
* @queue_mapping: Queue mapping for multiqueue devices
|
||||
* @tc_index: Traffic control index
|
||||
* @tc_verd: traffic control verdict
|
||||
* @rxhash: the packet hash computed on receive
|
||||
* @queue_mapping: Queue mapping for multiqueue devices
|
||||
* @ndisc_nodetype: router type (from link layer)
|
||||
* @ooo_okay: allow the mapping of a socket to a queue to be changed
|
||||
* @dma_cookie: a cookie to one of several possible DMA operations
|
||||
* done by skb DMA functions
|
||||
* @secmark: security marking
|
||||
* @mark: Generic packet mark
|
||||
* @dropcount: total number of sk_receive_queue overflows
|
||||
* @vlan_tci: vlan tag control information
|
||||
* @transport_header: Transport layer header
|
||||
* @network_header: Network layer header
|
||||
* @mac_header: Link layer header
|
||||
* @tail: Tail pointer
|
||||
* @end: End pointer
|
||||
* @head: Head of buffer
|
||||
* @data: Data head pointer
|
||||
* @truesize: Buffer size
|
||||
* @users: User count - see {datagram,tcp}.c
|
||||
*/
|
||||
|
||||
struct sk_buff {
|
||||
@@ -1562,16 +1579,22 @@ static inline struct sk_buff *netdev_alloc_skb(struct net_device *dev,
|
||||
return __netdev_alloc_skb(dev, length, GFP_ATOMIC);
|
||||
}
|
||||
|
||||
static inline struct sk_buff *netdev_alloc_skb_ip_align(struct net_device *dev,
|
||||
unsigned int length)
|
||||
static inline struct sk_buff *__netdev_alloc_skb_ip_align(struct net_device *dev,
|
||||
unsigned int length, gfp_t gfp)
|
||||
{
|
||||
struct sk_buff *skb = netdev_alloc_skb(dev, length + NET_IP_ALIGN);
|
||||
struct sk_buff *skb = __netdev_alloc_skb(dev, length + NET_IP_ALIGN, gfp);
|
||||
|
||||
if (NET_IP_ALIGN && skb)
|
||||
skb_reserve(skb, NET_IP_ALIGN);
|
||||
return skb;
|
||||
}
|
||||
|
||||
static inline struct sk_buff *netdev_alloc_skb_ip_align(struct net_device *dev,
|
||||
unsigned int length)
|
||||
{
|
||||
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
|
||||
@@ -2028,8 +2051,7 @@ static inline void sw_tx_timestamp(struct sk_buff *skb)
|
||||
* skb_tx_timestamp() - Driver hook for transmit timestamping
|
||||
*
|
||||
* Ethernet MAC Drivers should call this function in their hard_xmit()
|
||||
* function as soon as possible after giving the sk_buff to the MAC
|
||||
* hardware, but before freeing the sk_buff.
|
||||
* function immediately before giving the sk_buff to the MAC hardware.
|
||||
*
|
||||
* @skb: A socket buffer.
|
||||
*/
|
||||
@@ -2266,5 +2288,6 @@ static inline void skb_checksum_none_assert(struct sk_buff *skb)
|
||||
}
|
||||
|
||||
bool skb_partial_csum_set(struct sk_buff *skb, u16 start, u16 off);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _LINUX_SKBUFF_H */
|
||||
|
@@ -192,7 +192,8 @@ struct ucred {
|
||||
#define AF_IEEE802154 36 /* IEEE802154 sockets */
|
||||
#define AF_CAIF 37 /* CAIF sockets */
|
||||
#define AF_ALG 38 /* Algorithm sockets */
|
||||
#define AF_MAX 39 /* For now.. */
|
||||
#define AF_NFC 39 /* NFC sockets */
|
||||
#define AF_MAX 40 /* For now.. */
|
||||
|
||||
/* Protocol families, same as address families. */
|
||||
#define PF_UNSPEC AF_UNSPEC
|
||||
@@ -234,6 +235,7 @@ struct ucred {
|
||||
#define PF_IEEE802154 AF_IEEE802154
|
||||
#define PF_CAIF AF_CAIF
|
||||
#define PF_ALG AF_ALG
|
||||
#define PF_NFC AF_NFC
|
||||
#define PF_MAX AF_MAX
|
||||
|
||||
/* Maximum queue length specifiable by listen. */
|
||||
|
@@ -99,7 +99,7 @@ struct ssb_sprom {
|
||||
struct ssb_boardinfo {
|
||||
u16 vendor;
|
||||
u16 type;
|
||||
u16 rev;
|
||||
u8 rev;
|
||||
};
|
||||
|
||||
|
||||
|
@@ -28,11 +28,21 @@
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
/* platform data for platform device structure's platform_data field */
|
||||
/* Platfrom data for platform device structure's platform_data field */
|
||||
|
||||
struct stmmac_mdio_bus_data {
|
||||
int bus_id;
|
||||
int (*phy_reset)(void *priv);
|
||||
unsigned int phy_mask;
|
||||
int *irqs;
|
||||
int probed_phy_irq;
|
||||
};
|
||||
|
||||
/* Private data for the STM on-board ethernet driver */
|
||||
struct plat_stmmacenet_data {
|
||||
int bus_id;
|
||||
int phy_addr;
|
||||
int interface;
|
||||
struct stmmac_mdio_bus_data *mdio_bus_data;
|
||||
int pbl;
|
||||
int clk_csr;
|
||||
int has_gmac;
|
||||
@@ -40,6 +50,7 @@ struct plat_stmmacenet_data {
|
||||
int tx_coe;
|
||||
int bugged_jumbo;
|
||||
int pmt;
|
||||
int force_sf_dma_mode;
|
||||
void (*fix_mac_speed)(void *priv, unsigned int speed);
|
||||
void (*bus_setup)(void __iomem *ioaddr);
|
||||
int (*init)(struct platform_device *pdev);
|
||||
@@ -47,14 +58,4 @@ struct plat_stmmacenet_data {
|
||||
void *custom_cfg;
|
||||
void *bsp_priv;
|
||||
};
|
||||
|
||||
struct plat_stmmacphy_data {
|
||||
int bus_id;
|
||||
int phy_addr;
|
||||
unsigned int phy_mask;
|
||||
int interface;
|
||||
int (*phy_reset)(void *priv);
|
||||
void *priv;
|
||||
};
|
||||
#endif
|
||||
|
||||
|
@@ -67,7 +67,7 @@ enum {
|
||||
TCF_META_ID_SK_FORWARD_ALLOCS,
|
||||
TCF_META_ID_SK_SNDBUF,
|
||||
TCF_META_ID_SK_ALLOCS,
|
||||
TCF_META_ID_SK_ROUTE_CAPS,
|
||||
__TCF_META_ID_SK_ROUTE_CAPS, /* unimplemented but in ABI already */
|
||||
TCF_META_ID_SK_HASH,
|
||||
TCF_META_ID_SK_LINGERTIME,
|
||||
TCF_META_ID_SK_ACK_BACKLOG,
|
||||
|
@@ -282,6 +282,7 @@ struct tcp_request_sock {
|
||||
#endif
|
||||
u32 rcv_isn;
|
||||
u32 snt_isn;
|
||||
u32 snt_synack; /* synack sent time */
|
||||
};
|
||||
|
||||
static inline struct tcp_request_sock *tcp_rsk(const struct request_sock *req)
|
||||
|
@@ -63,6 +63,7 @@ struct virtio_net_config {
|
||||
* specify GSO or CSUM features, you can simply ignore the header. */
|
||||
struct virtio_net_hdr {
|
||||
#define VIRTIO_NET_HDR_F_NEEDS_CSUM 1 // Use csum_start, csum_offset
|
||||
#define VIRTIO_NET_HDR_F_DATA_VALID 2 // Csum is valid
|
||||
__u8 flags;
|
||||
#define VIRTIO_NET_HDR_GSO_NONE 0 // Not a GSO frame
|
||||
#define VIRTIO_NET_HDR_GSO_TCPV4 1 // GSO frame, IPv4 TCP (TSO)
|
||||
|
Reference in New Issue
Block a user