Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1443 commits) phy/marvell: add 88ec048 support igb: Program MDICNFG register prior to PHY init e1000e: correct MAC-PHY interconnect register offset for 82579 hso: Add new product ID can: Add driver for esd CAN-USB/2 device l2tp: fix export of header file for userspace can-raw: Fix skb_orphan_try handling Revert "net: remove zap_completion_queue" net: cleanup inclusion phy/marvell: add 88e1121 interface mode support u32: negative offset fix net: Fix a typo from "dev" to "ndev" igb: Use irq_synchronize per vector when using MSI-X ixgbevf: fix null pointer dereference due to filter being set for VLAN 0 e1000e: Fix irq_synchronize in MSI-X case e1000e: register pm_qos request on hardware activation ip_fragment: fix subtracting PPPOE_SES_HLEN from mtu twice net: Add getsockopt support for TCP thin-streams cxgb4: update driver version cxgb4: add new PCI IDs ... Manually fix up conflicts in: - drivers/net/e1000e/netdev.c: due to pm_qos registration infrastructure changes - drivers/net/phy/marvell.c: conflict between adding 88ec048 support and cleaning up the IDs - drivers/net/wireless/ipw2x00/ipw2100.c: trivial ipw2100_pm_qos_req conflict (registration change vs marking it static)
This commit is contained in:
@@ -276,6 +276,7 @@ ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/include/asm/kvm_para.h \
|
||||
$(srctree)/include/asm-$(SRCARCH)/kvm_para.h),)
|
||||
unifdef-y += kvm_para.h
|
||||
endif
|
||||
unifdef-y += l2tp.h
|
||||
unifdef-y += llc.h
|
||||
unifdef-y += loop.h
|
||||
unifdef-y += lp.h
|
||||
|
||||
@@ -431,6 +431,14 @@ struct atm_dev *atm_dev_register(const char *type,const struct atmdev_ops *ops,
|
||||
int number,unsigned long *flags); /* number == -1: pick first available */
|
||||
struct atm_dev *atm_dev_lookup(int number);
|
||||
void atm_dev_deregister(struct atm_dev *dev);
|
||||
|
||||
/* atm_dev_signal_change
|
||||
*
|
||||
* Propagate lower layer signal change in atm_dev->signal to netdevice.
|
||||
* The event will be sent via a notifier call chain.
|
||||
*/
|
||||
void atm_dev_signal_change(struct atm_dev *dev, char signal);
|
||||
|
||||
void vcc_insert_socket(struct sock *sk);
|
||||
|
||||
|
||||
@@ -510,6 +518,15 @@ void register_atm_ioctl(struct atm_ioctl *);
|
||||
*/
|
||||
void deregister_atm_ioctl(struct atm_ioctl *);
|
||||
|
||||
|
||||
/* register_atmdevice_notifier - register atm_dev notify events
|
||||
*
|
||||
* Clients like br2684 will register notify events
|
||||
* Currently we notify of signal found/lost
|
||||
*/
|
||||
int register_atmdevice_notifier(struct notifier_block *nb);
|
||||
void unregister_atmdevice_notifier(struct notifier_block *nb);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
#define PHY_ID_BCM50610 0x0143bd60
|
||||
#define PHY_ID_BCM50610M 0x0143bd70
|
||||
#define PHY_ID_BCM5241 0x0143bc30
|
||||
#define PHY_ID_BCMAC131 0x0143bc70
|
||||
#define PHY_ID_BCM5481 0x0143bca0
|
||||
#define PHY_ID_BCM5482 0x0143bcb0
|
||||
#define PHY_ID_BCM5411 0x00206070
|
||||
#define PHY_ID_BCM5421 0x002060e0
|
||||
#define PHY_ID_BCM5464 0x002060b0
|
||||
#define PHY_ID_BCM5461 0x002060c0
|
||||
#define PHY_ID_BCM57780 0x03625d90
|
||||
|
||||
#define PHY_BCM_OUI_MASK 0xfffffc00
|
||||
|
||||
@@ -62,6 +62,7 @@ enum caif_channel_priority {
|
||||
* @CAIFPROTO_DATAGRAM_LOOP: Datagram loopback channel, used for testing.
|
||||
* @CAIFPROTO_UTIL: Utility (Psock) channel.
|
||||
* @CAIFPROTO_RFM: Remote File Manager
|
||||
* @CAIFPROTO_DEBUG: Debug link
|
||||
*
|
||||
* This enum defines the CAIF Channel type to be used. This defines
|
||||
* the service to connect to on the modem.
|
||||
@@ -72,6 +73,7 @@ enum caif_protocol_type {
|
||||
CAIFPROTO_DATAGRAM_LOOP,
|
||||
CAIFPROTO_UTIL,
|
||||
CAIFPROTO_RFM,
|
||||
CAIFPROTO_DEBUG,
|
||||
_CAIFPROTO_MAX
|
||||
};
|
||||
#define CAIFPROTO_MAX _CAIFPROTO_MAX
|
||||
@@ -83,6 +85,28 @@ enum caif_protocol_type {
|
||||
enum caif_at_type {
|
||||
CAIF_ATTYPE_PLAIN = 2
|
||||
};
|
||||
/**
|
||||
* enum caif_debug_type - Content selection for debug connection
|
||||
* @CAIF_DEBUG_TRACE_INTERACTIVE: Connection will contain
|
||||
* both trace and interactive debug.
|
||||
* @CAIF_DEBUG_TRACE: Connection contains trace only.
|
||||
* @CAIF_DEBUG_INTERACTIVE: Connection to interactive debug.
|
||||
*/
|
||||
enum caif_debug_type {
|
||||
CAIF_DEBUG_TRACE_INTERACTIVE = 0,
|
||||
CAIF_DEBUG_TRACE,
|
||||
CAIF_DEBUG_INTERACTIVE,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum caif_debug_service - Debug Service Endpoint
|
||||
* @CAIF_RADIO_DEBUG_SERVICE: Debug service on the Radio sub-system
|
||||
* @CAIF_APP_DEBUG_SERVICE: Debug for the applications sub-system
|
||||
*/
|
||||
enum caif_debug_service {
|
||||
CAIF_RADIO_DEBUG_SERVICE = 1,
|
||||
CAIF_APP_DEBUG_SERVICE
|
||||
};
|
||||
|
||||
/**
|
||||
* struct sockaddr_caif - the sockaddr structure for CAIF sockets.
|
||||
@@ -109,6 +133,12 @@ enum caif_at_type {
|
||||
*
|
||||
* @u.rfm.volume: Volume to mount.
|
||||
*
|
||||
* @u.dbg: Applies when family = CAIFPROTO_DEBUG.
|
||||
*
|
||||
* @u.dbg.type: Type of debug connection to set up
|
||||
* (caif_debug_type).
|
||||
*
|
||||
* @u.dbg.service: Service sub-system to connect (caif_debug_service
|
||||
* Description:
|
||||
* This structure holds the connect parameters used for setting up a
|
||||
* CAIF Channel. It defines the service to connect to on the modem.
|
||||
@@ -130,6 +160,10 @@ struct sockaddr_caif {
|
||||
__u32 connection_id;
|
||||
char volume[16];
|
||||
} rfm; /* CAIFPROTO_RFM */
|
||||
struct {
|
||||
__u8 type; /* type:enum caif_debug_type */
|
||||
__u8 service; /* service:caif_debug_service */
|
||||
} dbg; /* CAIFPROTO_DEBUG */
|
||||
} u;
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright (C) 2010 Marc Kleine-Budde <kernel@pengutronix.de>
|
||||
*
|
||||
* This file is released under the GPLv2
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __CAN_PLATFORM_FLEXCAN_H
|
||||
#define __CAN_PLATFORM_FLEXCAN_H
|
||||
|
||||
/**
|
||||
* struct flexcan_platform_data - flex CAN controller platform data
|
||||
* @transceiver_enable: - called to power on/off the transceiver
|
||||
*
|
||||
*/
|
||||
struct flexcan_platform_data {
|
||||
void (*transceiver_switch)(int enable);
|
||||
};
|
||||
|
||||
#endif /* __CAN_PLATFORM_FLEXCAN_H */
|
||||
@@ -578,6 +578,7 @@ struct task_struct *cgroup_iter_next(struct cgroup *cgrp,
|
||||
void cgroup_iter_end(struct cgroup *cgrp, struct cgroup_iter *it);
|
||||
int cgroup_scan_tasks(struct cgroup_scanner *scan);
|
||||
int cgroup_attach_task(struct cgroup *, struct task_struct *);
|
||||
int cgroup_attach_task_current_cg(struct task_struct *);
|
||||
|
||||
/*
|
||||
* CSS ID is ID for cgroup_subsys_state structs under subsys. This only works
|
||||
@@ -634,6 +635,12 @@ static inline int cgroupstats_build(struct cgroupstats *stats,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* No cgroups - nothing to do */
|
||||
static inline int cgroup_attach_task_current_cg(struct task_struct *t)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* !CONFIG_CGROUPS */
|
||||
|
||||
#endif /* _LINUX_CGROUP_H */
|
||||
|
||||
+85
-25
@@ -638,43 +638,103 @@ extern void sysdev_shutdown(void);
|
||||
|
||||
/* debugging and troubleshooting/diagnostic helpers. */
|
||||
extern const char *dev_driver_string(const struct device *dev);
|
||||
#define dev_printk(level, dev, format, arg...) \
|
||||
printk(level "%s %s: " format , dev_driver_string(dev) , \
|
||||
dev_name(dev) , ## arg)
|
||||
|
||||
#define dev_emerg(dev, format, arg...) \
|
||||
dev_printk(KERN_EMERG , dev , format , ## arg)
|
||||
#define dev_alert(dev, format, arg...) \
|
||||
dev_printk(KERN_ALERT , dev , format , ## arg)
|
||||
#define dev_crit(dev, format, arg...) \
|
||||
dev_printk(KERN_CRIT , dev , format , ## arg)
|
||||
#define dev_err(dev, format, arg...) \
|
||||
dev_printk(KERN_ERR , dev , format , ## arg)
|
||||
#define dev_warn(dev, format, arg...) \
|
||||
dev_printk(KERN_WARNING , dev , format , ## arg)
|
||||
#define dev_notice(dev, format, arg...) \
|
||||
dev_printk(KERN_NOTICE , dev , format , ## arg)
|
||||
#define dev_info(dev, format, arg...) \
|
||||
dev_printk(KERN_INFO , dev , format , ## arg)
|
||||
|
||||
#ifdef CONFIG_PRINTK
|
||||
|
||||
extern int dev_printk(const char *level, const struct device *dev,
|
||||
const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 3, 4)));
|
||||
extern int dev_emerg(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
extern int dev_alert(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
extern int dev_crit(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
extern int dev_err(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
extern int dev_warn(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
extern int dev_notice(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
extern int _dev_info(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
|
||||
#else
|
||||
|
||||
static inline int dev_printk(const char *level, const struct device *dev,
|
||||
const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 3, 4)));
|
||||
static inline int dev_printk(const char *level, const struct device *dev,
|
||||
const char *fmt, ...)
|
||||
{ return 0; }
|
||||
|
||||
static inline int dev_emerg(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
static inline int dev_emerg(const struct device *dev, const char *fmt, ...)
|
||||
{ return 0; }
|
||||
static inline int dev_crit(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
static inline int dev_crit(const struct device *dev, const char *fmt, ...)
|
||||
{ return 0; }
|
||||
static inline int dev_alert(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
static inline int dev_alert(const struct device *dev, const char *fmt, ...)
|
||||
{ return 0; }
|
||||
static inline int dev_err(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
static inline int dev_err(const struct device *dev, const char *fmt, ...)
|
||||
{ return 0; }
|
||||
static inline int dev_warn(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
static inline int dev_warn(const struct device *dev, const char *fmt, ...)
|
||||
{ return 0; }
|
||||
static inline int dev_notice(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
static inline int dev_notice(const struct device *dev, const char *fmt, ...)
|
||||
{ return 0; }
|
||||
static inline int _dev_info(const struct device *dev, const char *fmt, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
static inline int _dev_info(const struct device *dev, const char *fmt, ...)
|
||||
{ return 0; }
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Stupid hackaround for existing uses of non-printk uses dev_info
|
||||
*
|
||||
* Note that the definition of dev_info below is actually _dev_info
|
||||
* and a macro is used to avoid redefining dev_info
|
||||
*/
|
||||
|
||||
#define dev_info(dev, fmt, arg...) _dev_info(dev, fmt, ##arg)
|
||||
|
||||
#if defined(DEBUG)
|
||||
#define dev_dbg(dev, format, arg...) \
|
||||
dev_printk(KERN_DEBUG , dev , format , ## arg)
|
||||
dev_printk(KERN_DEBUG, dev, format, ##arg)
|
||||
#elif defined(CONFIG_DYNAMIC_DEBUG)
|
||||
#define dev_dbg(dev, format, ...) do { \
|
||||
#define dev_dbg(dev, format, ...) \
|
||||
do { \
|
||||
dynamic_dev_dbg(dev, format, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
} while (0)
|
||||
#else
|
||||
#define dev_dbg(dev, format, arg...) \
|
||||
({ if (0) dev_printk(KERN_DEBUG, dev, format, ##arg); 0; })
|
||||
#define dev_dbg(dev, format, arg...) \
|
||||
({ \
|
||||
if (0) \
|
||||
dev_printk(KERN_DEBUG, dev, format, ##arg); \
|
||||
0; \
|
||||
})
|
||||
#endif
|
||||
|
||||
#ifdef VERBOSE_DEBUG
|
||||
#define dev_vdbg dev_dbg
|
||||
#else
|
||||
|
||||
#define dev_vdbg(dev, format, arg...) \
|
||||
({ if (0) dev_printk(KERN_DEBUG, dev, format, ##arg); 0; })
|
||||
#define dev_vdbg(dev, format, arg...) \
|
||||
({ \
|
||||
if (0) \
|
||||
dev_printk(KERN_DEBUG, dev, format, ##arg); \
|
||||
0; \
|
||||
})
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
#define PCI_EEPROM_WIDTH_93C46 6
|
||||
#define PCI_EEPROM_WIDTH_93C56 8
|
||||
#define PCI_EEPROM_WIDTH_93C66 8
|
||||
#define PCI_EEPROM_WIDTH_93C86 8
|
||||
#define PCI_EEPROM_WIDTH_OPCODE 3
|
||||
#define PCI_EEPROM_WRITE_OPCODE 0x05
|
||||
#define PCI_EEPROM_READ_OPCODE 0x06
|
||||
|
||||
@@ -126,6 +126,20 @@ static inline void random_ether_addr(u8 *addr)
|
||||
addr [0] |= 0x02; /* set local assignment bit (IEEE802) */
|
||||
}
|
||||
|
||||
/**
|
||||
* dev_hw_addr_random - Create random MAC and set device flag
|
||||
* @dev: pointer to net_device structure
|
||||
* @addr: Pointer to a six-byte array containing the Ethernet address
|
||||
*
|
||||
* Generate random MAC to be used by a device and set addr_assign_type
|
||||
* so the state can be read by sysfs and be used by udev.
|
||||
*/
|
||||
static inline void dev_hw_addr_random(struct net_device *dev, u8 *hwaddr)
|
||||
{
|
||||
dev->addr_assign_type |= NET_ADDR_RANDOM;
|
||||
random_ether_addr(hwaddr);
|
||||
}
|
||||
|
||||
/**
|
||||
* compare_ether_addr - Compare two Ethernet addresses
|
||||
* @addr1: Pointer to a six-byte array containing the Ethernet address
|
||||
|
||||
+36
-21
@@ -386,6 +386,15 @@ struct ethtool_rxnfc {
|
||||
__u32 rule_locs[0];
|
||||
};
|
||||
|
||||
struct ethtool_rxfh_indir {
|
||||
__u32 cmd;
|
||||
/* On entry, this is the array size of the user buffer. On
|
||||
* return from ETHTOOL_GRXFHINDIR, this is the array size of
|
||||
* the hardware indirection table. */
|
||||
__u32 size;
|
||||
__u32 ring_index[0]; /* ring/queue index for each hash value */
|
||||
};
|
||||
|
||||
struct ethtool_rx_ntuple_flow_spec {
|
||||
__u32 flow_type;
|
||||
union {
|
||||
@@ -459,7 +468,7 @@ 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);
|
||||
int ethtool_op_set_flags(struct net_device *dev, u32 data, u32 supported);
|
||||
void ethtool_ntuple_flush(struct net_device *dev);
|
||||
|
||||
/**
|
||||
@@ -578,6 +587,10 @@ struct ethtool_ops {
|
||||
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 *,
|
||||
const struct ethtool_rxfh_indir *);
|
||||
};
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
@@ -588,29 +601,29 @@ struct ethtool_ops {
|
||||
#define ETHTOOL_GREGS 0x00000004 /* Get NIC registers. */
|
||||
#define ETHTOOL_GWOL 0x00000005 /* Get wake-on-lan options. */
|
||||
#define ETHTOOL_SWOL 0x00000006 /* Set wake-on-lan options. */
|
||||
#define ETHTOOL_GMSGLVL 0x00000007 /* Get driver message level */
|
||||
#define ETHTOOL_SMSGLVL 0x00000008 /* Set driver msg level. */
|
||||
#define ETHTOOL_GMSGLVL 0x00000007 /* Get driver message level */
|
||||
#define ETHTOOL_SMSGLVL 0x00000008 /* Set driver msg level. */
|
||||
#define ETHTOOL_NWAY_RST 0x00000009 /* Restart autonegotiation. */
|
||||
#define ETHTOOL_GLINK 0x0000000a /* Get link status (ethtool_value) */
|
||||
#define ETHTOOL_GEEPROM 0x0000000b /* Get EEPROM data */
|
||||
#define ETHTOOL_SEEPROM 0x0000000c /* Set EEPROM data. */
|
||||
#define ETHTOOL_GEEPROM 0x0000000b /* Get EEPROM data */
|
||||
#define ETHTOOL_SEEPROM 0x0000000c /* Set EEPROM data. */
|
||||
#define ETHTOOL_GCOALESCE 0x0000000e /* Get coalesce config */
|
||||
#define ETHTOOL_SCOALESCE 0x0000000f /* Set coalesce config. */
|
||||
#define ETHTOOL_GRINGPARAM 0x00000010 /* Get ring parameters */
|
||||
#define ETHTOOL_SRINGPARAM 0x00000011 /* Set ring parameters. */
|
||||
#define ETHTOOL_GPAUSEPARAM 0x00000012 /* Get pause parameters */
|
||||
#define ETHTOOL_SPAUSEPARAM 0x00000013 /* Set pause parameters. */
|
||||
#define ETHTOOL_GRXCSUM 0x00000014 /* Get RX hw csum enable (ethtool_value) */
|
||||
#define ETHTOOL_SRXCSUM 0x00000015 /* Set RX hw csum enable (ethtool_value) */
|
||||
#define ETHTOOL_GTXCSUM 0x00000016 /* Get TX hw csum enable (ethtool_value) */
|
||||
#define ETHTOOL_STXCSUM 0x00000017 /* Set TX hw csum enable (ethtool_value) */
|
||||
#define ETHTOOL_GRXCSUM 0x00000014 /* Get RX hw csum enable (ethtool_value) */
|
||||
#define ETHTOOL_SRXCSUM 0x00000015 /* Set RX hw csum enable (ethtool_value) */
|
||||
#define ETHTOOL_GTXCSUM 0x00000016 /* Get TX hw csum enable (ethtool_value) */
|
||||
#define ETHTOOL_STXCSUM 0x00000017 /* Set TX hw csum enable (ethtool_value) */
|
||||
#define ETHTOOL_GSG 0x00000018 /* Get scatter-gather enable
|
||||
* (ethtool_value) */
|
||||
#define ETHTOOL_SSG 0x00000019 /* Set scatter-gather enable
|
||||
* (ethtool_value). */
|
||||
#define ETHTOOL_TEST 0x0000001a /* execute NIC self-test. */
|
||||
#define ETHTOOL_GSTRINGS 0x0000001b /* get specified string set */
|
||||
#define ETHTOOL_PHYS_ID 0x0000001c /* identify the NIC */
|
||||
#define ETHTOOL_PHYS_ID 0x0000001c /* identify the NIC */
|
||||
#define ETHTOOL_GSTATS 0x0000001d /* get NIC-specific statistics */
|
||||
#define ETHTOOL_GTSO 0x0000001e /* Get TSO enable (ethtool_value) */
|
||||
#define ETHTOOL_STSO 0x0000001f /* Set TSO enable (ethtool_value) */
|
||||
@@ -621,8 +634,8 @@ struct ethtool_ops {
|
||||
#define ETHTOOL_SGSO 0x00000024 /* Set GSO enable (ethtool_value) */
|
||||
#define ETHTOOL_GFLAGS 0x00000025 /* Get flags bitmap(ethtool_value) */
|
||||
#define ETHTOOL_SFLAGS 0x00000026 /* Set flags bitmap(ethtool_value) */
|
||||
#define ETHTOOL_GPFLAGS 0x00000027 /* Get driver-private flags bitmap */
|
||||
#define ETHTOOL_SPFLAGS 0x00000028 /* Set driver-private flags bitmap */
|
||||
#define ETHTOOL_GPFLAGS 0x00000027 /* Get driver-private flags bitmap */
|
||||
#define ETHTOOL_SPFLAGS 0x00000028 /* Set driver-private flags bitmap */
|
||||
|
||||
#define ETHTOOL_GRXFH 0x00000029 /* Get RX flow hash configuration */
|
||||
#define ETHTOOL_SRXFH 0x0000002a /* Set RX flow hash configuration */
|
||||
@@ -639,6 +652,8 @@ struct ethtool_ops {
|
||||
#define ETHTOOL_SRXNTUPLE 0x00000035 /* Add an n-tuple filter to device */
|
||||
#define ETHTOOL_GRXNTUPLE 0x00000036 /* Get n-tuple filters from device */
|
||||
#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 */
|
||||
|
||||
/* compatibility with older code */
|
||||
#define SPARC_ETH_GSET ETHTOOL_GSET
|
||||
@@ -647,18 +662,18 @@ struct ethtool_ops {
|
||||
/* Indicates what features are supported by the interface. */
|
||||
#define SUPPORTED_10baseT_Half (1 << 0)
|
||||
#define SUPPORTED_10baseT_Full (1 << 1)
|
||||
#define SUPPORTED_100baseT_Half (1 << 2)
|
||||
#define SUPPORTED_100baseT_Full (1 << 3)
|
||||
#define SUPPORTED_100baseT_Half (1 << 2)
|
||||
#define SUPPORTED_100baseT_Full (1 << 3)
|
||||
#define SUPPORTED_1000baseT_Half (1 << 4)
|
||||
#define SUPPORTED_1000baseT_Full (1 << 5)
|
||||
#define SUPPORTED_Autoneg (1 << 6)
|
||||
#define SUPPORTED_TP (1 << 7)
|
||||
#define SUPPORTED_AUI (1 << 8)
|
||||
#define SUPPORTED_MII (1 << 9)
|
||||
#define SUPPORTED_FIBRE (1 << 10)
|
||||
#define SUPPORTED_FIBRE (1 << 10)
|
||||
#define SUPPORTED_BNC (1 << 11)
|
||||
#define SUPPORTED_10000baseT_Full (1 << 12)
|
||||
#define SUPPORTED_Pause (1 << 13)
|
||||
#define SUPPORTED_Pause (1 << 13)
|
||||
#define SUPPORTED_Asym_Pause (1 << 14)
|
||||
#define SUPPORTED_2500baseX_Full (1 << 15)
|
||||
#define SUPPORTED_Backplane (1 << 16)
|
||||
@@ -668,8 +683,8 @@ struct ethtool_ops {
|
||||
#define SUPPORTED_10000baseR_FEC (1 << 20)
|
||||
|
||||
/* Indicates what features are advertised by the interface. */
|
||||
#define ADVERTISED_10baseT_Half (1 << 0)
|
||||
#define ADVERTISED_10baseT_Full (1 << 1)
|
||||
#define ADVERTISED_10baseT_Half (1 << 0)
|
||||
#define ADVERTISED_10baseT_Full (1 << 1)
|
||||
#define ADVERTISED_100baseT_Half (1 << 2)
|
||||
#define ADVERTISED_100baseT_Full (1 << 3)
|
||||
#define ADVERTISED_1000baseT_Half (1 << 4)
|
||||
@@ -708,12 +723,12 @@ struct ethtool_ops {
|
||||
#define DUPLEX_FULL 0x01
|
||||
|
||||
/* Which connector port. */
|
||||
#define PORT_TP 0x00
|
||||
#define PORT_TP 0x00
|
||||
#define PORT_AUI 0x01
|
||||
#define PORT_MII 0x02
|
||||
#define PORT_FIBRE 0x03
|
||||
#define PORT_BNC 0x04
|
||||
#define PORT_DA 0x05
|
||||
#define PORT_DA 0x05
|
||||
#define PORT_NONE 0xef
|
||||
#define PORT_OTHER 0xff
|
||||
|
||||
@@ -727,7 +742,7 @@ struct ethtool_ops {
|
||||
/* Enable or disable autonegotiation. If this is set to enable,
|
||||
* the forced link modes above are completely ignored.
|
||||
*/
|
||||
#define AUTONEG_DISABLE 0x00
|
||||
#define AUTONEG_DISABLE 0x00
|
||||
#define AUTONEG_ENABLE 0x01
|
||||
|
||||
/* Mode MDI or MDI-X */
|
||||
|
||||
@@ -91,6 +91,54 @@ struct sock_fprog { /* Required for SO_ATTACH_FILTER. */
|
||||
#define BPF_TAX 0x00
|
||||
#define BPF_TXA 0x80
|
||||
|
||||
enum {
|
||||
BPF_S_RET_K = 0,
|
||||
BPF_S_RET_A,
|
||||
BPF_S_ALU_ADD_K,
|
||||
BPF_S_ALU_ADD_X,
|
||||
BPF_S_ALU_SUB_K,
|
||||
BPF_S_ALU_SUB_X,
|
||||
BPF_S_ALU_MUL_K,
|
||||
BPF_S_ALU_MUL_X,
|
||||
BPF_S_ALU_DIV_X,
|
||||
BPF_S_ALU_AND_K,
|
||||
BPF_S_ALU_AND_X,
|
||||
BPF_S_ALU_OR_K,
|
||||
BPF_S_ALU_OR_X,
|
||||
BPF_S_ALU_LSH_K,
|
||||
BPF_S_ALU_LSH_X,
|
||||
BPF_S_ALU_RSH_K,
|
||||
BPF_S_ALU_RSH_X,
|
||||
BPF_S_ALU_NEG,
|
||||
BPF_S_LD_W_ABS,
|
||||
BPF_S_LD_H_ABS,
|
||||
BPF_S_LD_B_ABS,
|
||||
BPF_S_LD_W_LEN,
|
||||
BPF_S_LD_W_IND,
|
||||
BPF_S_LD_H_IND,
|
||||
BPF_S_LD_B_IND,
|
||||
BPF_S_LD_IMM,
|
||||
BPF_S_LDX_W_LEN,
|
||||
BPF_S_LDX_B_MSH,
|
||||
BPF_S_LDX_IMM,
|
||||
BPF_S_MISC_TAX,
|
||||
BPF_S_MISC_TXA,
|
||||
BPF_S_ALU_DIV_K,
|
||||
BPF_S_LD_MEM,
|
||||
BPF_S_LDX_MEM,
|
||||
BPF_S_ST,
|
||||
BPF_S_STX,
|
||||
BPF_S_JMP_JA,
|
||||
BPF_S_JMP_JEQ_K,
|
||||
BPF_S_JMP_JEQ_X,
|
||||
BPF_S_JMP_JGE_K,
|
||||
BPF_S_JMP_JGE_X,
|
||||
BPF_S_JMP_JGT_K,
|
||||
BPF_S_JMP_JGT_X,
|
||||
BPF_S_JMP_JSET_K,
|
||||
BPF_S_JMP_JSET_X,
|
||||
};
|
||||
|
||||
#ifndef BPF_MAXINSNS
|
||||
#define BPF_MAXINSNS 4096
|
||||
#endif
|
||||
|
||||
@@ -73,6 +73,8 @@
|
||||
#define IFF_DONT_BRIDGE 0x800 /* disallow bridging this ether dev */
|
||||
#define IFF_IN_NETPOLL 0x1000 /* whether we are processing netpoll */
|
||||
#define IFF_DISABLE_NETPOLL 0x2000 /* disable netpoll at run-time */
|
||||
#define IFF_MACVLAN_PORT 0x4000 /* device used as macvlan port */
|
||||
#define IFF_BRIDGE_PORT 0x8000 /* device used as bridge port */
|
||||
|
||||
#define IF_GET_IFACE 0x0001 /* for querying only */
|
||||
#define IF_GET_PROTO 0x0002
|
||||
|
||||
@@ -83,6 +83,7 @@
|
||||
|
||||
#define BOND_DEFAULT_MAX_BONDS 1 /* Default maximum number of devices to support */
|
||||
|
||||
#define BOND_DEFAULT_TX_QUEUES 16 /* Default number of tx queues per device */
|
||||
/* hashing types */
|
||||
#define BOND_XMIT_POLICY_LAYER2 0 /* layer 2 (MAC only), default */
|
||||
#define BOND_XMIT_POLICY_LAYER34 1 /* layer 3+4 (IP ^ (TCP || UDP)) */
|
||||
|
||||
@@ -102,8 +102,6 @@ struct __fdb_entry {
|
||||
#include <linux/netdevice.h>
|
||||
|
||||
extern void brioctl_set(int (*ioctl_hook)(struct net *, unsigned int, void __user *));
|
||||
extern struct sk_buff *(*br_handle_frame_hook)(struct net_bridge_port *p,
|
||||
struct sk_buff *skb);
|
||||
extern int (*br_should_route_hook)(struct sk_buff *skb);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -119,7 +119,7 @@ struct ethhdr {
|
||||
unsigned char h_dest[ETH_ALEN]; /* destination eth addr */
|
||||
unsigned char h_source[ETH_ALEN]; /* source ether addr */
|
||||
__be16 h_proto; /* packet type ID field */
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/skbuff.h>
|
||||
|
||||
@@ -67,7 +67,7 @@ struct fddi_8022_1_hdr {
|
||||
__u8 dsap; /* destination service access point */
|
||||
__u8 ssap; /* source service access point */
|
||||
__u8 ctrl; /* control byte #1 */
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
/* Define 802.2 Type 2 header */
|
||||
struct fddi_8022_2_hdr {
|
||||
@@ -75,7 +75,7 @@ struct fddi_8022_2_hdr {
|
||||
__u8 ssap; /* source service access point */
|
||||
__u8 ctrl_1; /* control byte #1 */
|
||||
__u8 ctrl_2; /* control byte #2 */
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
/* Define 802.2 SNAP header */
|
||||
#define FDDI_K_OUI_LEN 3
|
||||
@@ -85,7 +85,7 @@ struct fddi_snap_hdr {
|
||||
__u8 ctrl; /* always 0x03 */
|
||||
__u8 oui[FDDI_K_OUI_LEN]; /* organizational universal id */
|
||||
__be16 ethertype; /* packet type ID field */
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
/* Define FDDI LLC frame header */
|
||||
struct fddihdr {
|
||||
@@ -98,7 +98,7 @@ struct fddihdr {
|
||||
struct fddi_8022_2_hdr llc_8022_2;
|
||||
struct fddi_snap_hdr llc_snap;
|
||||
} hdr;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/netdevice.h>
|
||||
|
||||
@@ -135,7 +135,7 @@ struct frhdr
|
||||
__be16 PID;
|
||||
|
||||
#define IP_NLPID pad
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
/* see RFC 1490 for the definition of the following */
|
||||
#define FRAD_I_UI 0x03
|
||||
|
||||
@@ -104,7 +104,7 @@ struct hippi_fp_hdr {
|
||||
__be32 fixed;
|
||||
#endif
|
||||
__be32 d2_size;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
struct hippi_le_hdr {
|
||||
#if defined (__BIG_ENDIAN_BITFIELD)
|
||||
@@ -129,7 +129,7 @@ struct hippi_le_hdr {
|
||||
__u8 daddr[HIPPI_ALEN];
|
||||
__u16 locally_administered;
|
||||
__u8 saddr[HIPPI_ALEN];
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HIPPI_OUI_LEN 3
|
||||
/*
|
||||
@@ -142,12 +142,12 @@ struct hippi_snap_hdr {
|
||||
__u8 ctrl; /* always 0x03 */
|
||||
__u8 oui[HIPPI_OUI_LEN]; /* organizational universal id (zero)*/
|
||||
__be16 ethertype; /* packet type ID field */
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
struct hippi_hdr {
|
||||
struct hippi_fp_hdr fp;
|
||||
struct hippi_le_hdr le;
|
||||
struct hippi_snap_hdr snap;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#endif /* _LINUX_IF_HIPPI_H */
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/netlink.h>
|
||||
|
||||
/* The struct should be in sync with struct net_device_stats */
|
||||
/* This struct should be in sync with struct rtnl_link_stats64 */
|
||||
struct rtnl_link_stats {
|
||||
__u32 rx_packets; /* total packets received */
|
||||
__u32 tx_packets; /* total packets transmitted */
|
||||
@@ -37,6 +37,7 @@ struct rtnl_link_stats {
|
||||
__u32 tx_compressed;
|
||||
};
|
||||
|
||||
/* The main device statistics structure */
|
||||
struct rtnl_link_stats64 {
|
||||
__u64 rx_packets; /* total packets received */
|
||||
__u64 tx_packets; /* total packets transmitted */
|
||||
|
||||
+12
-11
@@ -6,6 +6,7 @@
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/netlink.h>
|
||||
#include <net/netlink.h>
|
||||
#include <linux/u64_stats_sync.h>
|
||||
|
||||
#if defined(CONFIG_MACVTAP) || defined(CONFIG_MACVTAP_MODULE)
|
||||
struct socket *macvtap_get_socket(struct file *);
|
||||
@@ -27,14 +28,16 @@ struct macvtap_queue;
|
||||
* struct macvlan_rx_stats - MACVLAN percpu rx stats
|
||||
* @rx_packets: number of received packets
|
||||
* @rx_bytes: number of received bytes
|
||||
* @multicast: number of received multicast packets
|
||||
* @rx_multicast: number of received multicast packets
|
||||
* @syncp: synchronization point for 64bit counters
|
||||
* @rx_errors: number of errors
|
||||
*/
|
||||
struct macvlan_rx_stats {
|
||||
unsigned long rx_packets;
|
||||
unsigned long rx_bytes;
|
||||
unsigned long multicast;
|
||||
unsigned long rx_errors;
|
||||
u64 rx_packets;
|
||||
u64 rx_bytes;
|
||||
u64 rx_multicast;
|
||||
struct u64_stats_sync syncp;
|
||||
unsigned long rx_errors;
|
||||
};
|
||||
|
||||
struct macvlan_dev {
|
||||
@@ -56,12 +59,14 @@ static inline void macvlan_count_rx(const struct macvlan_dev *vlan,
|
||||
{
|
||||
struct macvlan_rx_stats *rx_stats;
|
||||
|
||||
rx_stats = per_cpu_ptr(vlan->rx_stats, smp_processor_id());
|
||||
rx_stats = this_cpu_ptr(vlan->rx_stats);
|
||||
if (likely(success)) {
|
||||
u64_stats_update_begin(&rx_stats->syncp);
|
||||
rx_stats->rx_packets++;;
|
||||
rx_stats->rx_bytes += len;
|
||||
if (multicast)
|
||||
rx_stats->multicast++;
|
||||
rx_stats->rx_multicast++;
|
||||
u64_stats_update_end(&rx_stats->syncp);
|
||||
} else {
|
||||
rx_stats->rx_errors++;
|
||||
}
|
||||
@@ -86,8 +91,4 @@ extern int macvlan_link_register(struct rtnl_link_ops *ops);
|
||||
extern netdev_tx_t macvlan_start_xmit(struct sk_buff *skb,
|
||||
struct net_device *dev);
|
||||
|
||||
|
||||
extern struct sk_buff *(*macvlan_handle_frame_hook)(struct macvlan_port *,
|
||||
struct sk_buff *);
|
||||
|
||||
#endif /* _LINUX_IF_MACVLAN_H */
|
||||
|
||||
@@ -48,6 +48,7 @@ struct sockaddr_ll {
|
||||
#define PACKET_LOSS 14
|
||||
#define PACKET_VNET_HDR 15
|
||||
#define PACKET_TX_TIMESTAMP 16
|
||||
#define PACKET_TIMESTAMP 17
|
||||
|
||||
struct tpacket_stats {
|
||||
unsigned int tp_packets;
|
||||
|
||||
@@ -59,7 +59,7 @@ struct sockaddr_pppox {
|
||||
union{
|
||||
struct pppoe_addr pppoe;
|
||||
}sa_addr;
|
||||
}__attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
/* The use of the above union isn't viable because the size of this
|
||||
* struct must stay fixed over time -- applications use sizeof(struct
|
||||
@@ -70,7 +70,7 @@ struct sockaddr_pppol2tp {
|
||||
sa_family_t sa_family; /* address family, AF_PPPOX */
|
||||
unsigned int sa_protocol; /* protocol identifier */
|
||||
struct pppol2tp_addr pppol2tp;
|
||||
}__attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
/* The L2TPv3 protocol changes tunnel and session ids from 16 to 32
|
||||
* bits. So we need a different sockaddr structure.
|
||||
@@ -79,7 +79,7 @@ struct sockaddr_pppol2tpv3 {
|
||||
sa_family_t sa_family; /* address family, AF_PPPOX */
|
||||
unsigned int sa_protocol; /* protocol identifier */
|
||||
struct pppol2tpv3_addr pppol2tp;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
/*********************************************************************
|
||||
*
|
||||
@@ -129,7 +129,7 @@ struct pppoe_hdr {
|
||||
__be16 sid;
|
||||
__be16 length;
|
||||
struct pppoe_tag tag[0];
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
/* Length of entire PPPoE + PPP header */
|
||||
#define PPPOE_SES_HLEN 8
|
||||
|
||||
@@ -85,6 +85,7 @@ struct in_addr {
|
||||
#define IP_RECVORIGDSTADDR IP_ORIGDSTADDR
|
||||
|
||||
#define IP_MINTTL 21
|
||||
#define IP_NODEFRAG 22
|
||||
|
||||
/* IP_MTU_DISCOVER values */
|
||||
#define IP_PMTUDISC_DONT 0 /* Never send DF frames */
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
*/
|
||||
#define IP_VS_SVC_F_PERSISTENT 0x0001 /* persistent port */
|
||||
#define IP_VS_SVC_F_HASHED 0x0002 /* hashed entry */
|
||||
#define IP_VS_SVC_F_ONEPACKET 0x0004 /* one-packet scheduling */
|
||||
|
||||
/*
|
||||
* Destination Server Flags
|
||||
@@ -85,6 +86,7 @@
|
||||
#define IP_VS_CONN_F_SEQ_MASK 0x0600 /* in/out sequence mask */
|
||||
#define IP_VS_CONN_F_NO_CPORT 0x0800 /* no client port set yet */
|
||||
#define IP_VS_CONN_F_TEMPLATE 0x1000 /* template, not connection */
|
||||
#define IP_VS_CONN_F_ONE_PACKET 0x2000 /* forward only one packet */
|
||||
|
||||
#define IP_VS_SCHEDNAME_MAXLEN 16
|
||||
#define IP_VS_IFNAME_MAXLEN 16
|
||||
|
||||
@@ -58,7 +58,7 @@ struct ipv6_opt_hdr {
|
||||
/*
|
||||
* TLV encoded option data follows.
|
||||
*/
|
||||
} __attribute__ ((packed)); /* required for some archs */
|
||||
} __packed; /* required for some archs */
|
||||
|
||||
#define ipv6_destopt_hdr ipv6_opt_hdr
|
||||
#define ipv6_hopopt_hdr ipv6_opt_hdr
|
||||
@@ -99,7 +99,7 @@ struct ipv6_destopt_hao {
|
||||
__u8 type;
|
||||
__u8 length;
|
||||
struct in6_addr addr;
|
||||
} __attribute__ ((__packed__));
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* IPv6 fixed header
|
||||
@@ -246,7 +246,7 @@ struct inet6_skb_parm {
|
||||
__u16 srcrt;
|
||||
__u16 dst1;
|
||||
__u16 lastopt;
|
||||
__u32 nhoff;
|
||||
__u16 nhoff;
|
||||
__u16 flags;
|
||||
#if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE)
|
||||
__u16 dsthao;
|
||||
|
||||
@@ -317,7 +317,7 @@ typedef struct T30_s {
|
||||
__u8 r_scantime;
|
||||
__u8 r_id[FAXIDLEN];
|
||||
__u8 r_code;
|
||||
} __attribute__((packed)) T30_s;
|
||||
} __packed T30_s;
|
||||
|
||||
#define ISDN_TTY_FAX_CONN_IN 0
|
||||
#define ISDN_TTY_FAX_CONN_OUT 1
|
||||
|
||||
@@ -171,6 +171,11 @@ static inline void might_fault(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
struct va_format {
|
||||
const char *fmt;
|
||||
va_list *va;
|
||||
};
|
||||
|
||||
extern struct atomic_notifier_head panic_notifier_list;
|
||||
extern long (*panic_blink)(long time);
|
||||
NORET_TYPE void panic(const char * fmt, ...)
|
||||
|
||||
@@ -25,10 +25,14 @@
|
||||
* struct ks8842_platform_data - Platform data of the KS8842 network driver
|
||||
* @macaddr: The MAC address of the device, set to all 0:s to use the on in
|
||||
* the chip.
|
||||
* @rx_dma_channel: The DMA channel to use for RX, -1 for none.
|
||||
* @tx_dma_channel: The DMA channel to use for TX, -1 for none.
|
||||
*
|
||||
*/
|
||||
struct ks8842_platform_data {
|
||||
u8 macaddr[ETH_ALEN];
|
||||
int rx_dma_channel;
|
||||
int tx_dma_channel;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -251,7 +251,7 @@
|
||||
struct mISDNhead {
|
||||
unsigned int prim;
|
||||
unsigned int id;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
#define MISDN_HEADER_LEN sizeof(struct mISDNhead)
|
||||
#define MAX_DATA_SIZE 2048
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#define MARVELL_PHY_ID_88E1121R 0x01410cb0
|
||||
#define MARVELL_PHY_ID_88E1145 0x01410cd0
|
||||
#define MARVELL_PHY_ID_88E1240 0x01410e30
|
||||
#define MARVELL_PHY_ID_88EC048 0x01410e90
|
||||
|
||||
/* struct phy_device dev_flags definitions */
|
||||
#define MARVELL_PHY_M1145_FLAGS_RESISTANCE 0x00000001
|
||||
|
||||
+1
-1
@@ -88,7 +88,7 @@ struct nbd_request {
|
||||
char handle[8];
|
||||
__be64 from;
|
||||
__be32 len;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* This is the reply packet that nbd-server sends back to the client after
|
||||
|
||||
+5
-5
@@ -27,7 +27,7 @@ struct ncp_request_header {
|
||||
__u8 conn_high;
|
||||
__u8 function;
|
||||
__u8 data[0];
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
#define NCP_REPLY (0x3333)
|
||||
#define NCP_WATCHDOG (0x3E3E)
|
||||
@@ -42,7 +42,7 @@ struct ncp_reply_header {
|
||||
__u8 completion_code;
|
||||
__u8 connection_state;
|
||||
__u8 data[0];
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
#define NCP_VOLNAME_LEN (16)
|
||||
#define NCP_NUMBER_OF_VOLUMES (256)
|
||||
@@ -158,7 +158,7 @@ struct nw_info_struct {
|
||||
#ifdef __KERNEL__
|
||||
struct nw_nfs_info nfs;
|
||||
#endif
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
/* modify mask - use with MODIFY_DOS_INFO structure */
|
||||
#define DM_ATTRIBUTES (cpu_to_le32(0x02))
|
||||
@@ -190,12 +190,12 @@ struct nw_modify_dos_info {
|
||||
__u16 inheritanceGrantMask;
|
||||
__u16 inheritanceRevokeMask;
|
||||
__u32 maximumSpace;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
struct nw_search_sequence {
|
||||
__u8 volNumber;
|
||||
__u32 dirBase;
|
||||
__u32 sequence;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
#endif /* _LINUX_NCP_H */
|
||||
|
||||
@@ -104,13 +104,13 @@ struct ncp_server {
|
||||
|
||||
unsigned int state; /* STREAM only: receiver state */
|
||||
struct {
|
||||
__u32 magic __attribute__((packed));
|
||||
__u32 len __attribute__((packed));
|
||||
__u16 type __attribute__((packed));
|
||||
__u16 p1 __attribute__((packed));
|
||||
__u16 p2 __attribute__((packed));
|
||||
__u16 p3 __attribute__((packed));
|
||||
__u16 type2 __attribute__((packed));
|
||||
__u32 magic __packed;
|
||||
__u32 len __packed;
|
||||
__u16 type __packed;
|
||||
__u16 p1 __packed;
|
||||
__u16 p2 __packed;
|
||||
__u16 p3 __packed;
|
||||
__u16 type2 __packed;
|
||||
} buf; /* STREAM only: temporary buffer */
|
||||
unsigned char* ptr; /* STREAM only: pointer to data */
|
||||
size_t len; /* STREAM only: length of data to receive */
|
||||
|
||||
+96
-69
@@ -54,6 +54,7 @@
|
||||
|
||||
struct vlan_group;
|
||||
struct netpoll_info;
|
||||
struct phy_device;
|
||||
/* 802.11 specific */
|
||||
struct wireless_dev;
|
||||
/* source back-compat hooks */
|
||||
@@ -65,6 +66,11 @@ struct wireless_dev;
|
||||
#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 */
|
||||
#define NET_ADDR_STOLEN 2 /* address is stolen from other device */
|
||||
|
||||
/* Backlog congestion levels */
|
||||
#define NET_RX_SUCCESS 0 /* keep 'em coming, baby */
|
||||
#define NET_RX_DROP 1 /* packet dropped */
|
||||
@@ -159,45 +165,39 @@ static inline bool dev_xmit_complete(int rc)
|
||||
#define MAX_HEADER (LL_MAX_HEADER + 48)
|
||||
#endif
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
/*
|
||||
* Network device statistics. Akin to the 2.0 ether stats but
|
||||
* with byte counters.
|
||||
* Old network device statistics. Fields are native words
|
||||
* (unsigned long) so they can be read and written atomically.
|
||||
*/
|
||||
|
||||
struct net_device_stats {
|
||||
unsigned long rx_packets; /* total packets received */
|
||||
unsigned long tx_packets; /* total packets transmitted */
|
||||
unsigned long rx_bytes; /* total bytes received */
|
||||
unsigned long tx_bytes; /* total bytes transmitted */
|
||||
unsigned long rx_errors; /* bad packets received */
|
||||
unsigned long tx_errors; /* packet transmit problems */
|
||||
unsigned long rx_dropped; /* no space in linux buffers */
|
||||
unsigned long tx_dropped; /* no space available in linux */
|
||||
unsigned long multicast; /* multicast packets received */
|
||||
unsigned long rx_packets;
|
||||
unsigned long tx_packets;
|
||||
unsigned long rx_bytes;
|
||||
unsigned long tx_bytes;
|
||||
unsigned long rx_errors;
|
||||
unsigned long tx_errors;
|
||||
unsigned long rx_dropped;
|
||||
unsigned long tx_dropped;
|
||||
unsigned long multicast;
|
||||
unsigned long collisions;
|
||||
|
||||
/* detailed rx_errors: */
|
||||
unsigned long rx_length_errors;
|
||||
unsigned long rx_over_errors; /* receiver ring buff overflow */
|
||||
unsigned long rx_crc_errors; /* recved pkt with crc error */
|
||||
unsigned long rx_frame_errors; /* recv'd frame alignment error */
|
||||
unsigned long rx_fifo_errors; /* recv'r fifo overrun */
|
||||
unsigned long rx_missed_errors; /* receiver missed packet */
|
||||
|
||||
/* detailed tx_errors */
|
||||
unsigned long rx_over_errors;
|
||||
unsigned long rx_crc_errors;
|
||||
unsigned long rx_frame_errors;
|
||||
unsigned long rx_fifo_errors;
|
||||
unsigned long rx_missed_errors;
|
||||
unsigned long tx_aborted_errors;
|
||||
unsigned long tx_carrier_errors;
|
||||
unsigned long tx_fifo_errors;
|
||||
unsigned long tx_heartbeat_errors;
|
||||
unsigned long tx_window_errors;
|
||||
|
||||
/* for cslip etc */
|
||||
unsigned long rx_compressed;
|
||||
unsigned long tx_compressed;
|
||||
};
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
|
||||
/* Media selection options. */
|
||||
enum {
|
||||
@@ -381,6 +381,8 @@ enum gro_result {
|
||||
};
|
||||
typedef enum gro_result gro_result_t;
|
||||
|
||||
typedef struct sk_buff *rx_handler_func_t(struct sk_buff *skb);
|
||||
|
||||
extern void __napi_schedule(struct napi_struct *n);
|
||||
|
||||
static inline int napi_disable_pending(struct napi_struct *n)
|
||||
@@ -504,9 +506,9 @@ struct netdev_queue {
|
||||
* please use this field instead of dev->trans_start
|
||||
*/
|
||||
unsigned long trans_start;
|
||||
unsigned long tx_bytes;
|
||||
unsigned long tx_packets;
|
||||
unsigned long tx_dropped;
|
||||
u64 tx_bytes;
|
||||
u64 tx_packets;
|
||||
u64 tx_dropped;
|
||||
} ____cacheline_aligned_in_smp;
|
||||
|
||||
#ifdef CONFIG_RPS
|
||||
@@ -660,10 +662,19 @@ struct netdev_rx_queue {
|
||||
* Callback uses when the transmitter has not made any progress
|
||||
* for dev->watchdog ticks.
|
||||
*
|
||||
* struct rtnl_link_stats64* (*ndo_get_stats64)(struct net_device *dev,
|
||||
* struct rtnl_link_stats64 *storage);
|
||||
* struct net_device_stats* (*ndo_get_stats)(struct net_device *dev);
|
||||
* Called when a user wants to get the network device usage
|
||||
* statistics. If not defined, the counters in dev->stats will
|
||||
* be used.
|
||||
* statistics. Drivers must do one of the following:
|
||||
* 1. Define @ndo_get_stats64 to fill in a zero-initialised
|
||||
* rtnl_link_stats64 structure passed by the caller.
|
||||
* 2. Define @ndo_get_stats to update a net_device_stats structure
|
||||
* (which should normally be dev->stats) and return a pointer to
|
||||
* it. The structure may be changed asynchronously only if each
|
||||
* field is written atomically.
|
||||
* 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 accleration
|
||||
@@ -718,6 +729,8 @@ struct net_device_ops {
|
||||
struct neigh_parms *);
|
||||
void (*ndo_tx_timeout) (struct net_device *dev);
|
||||
|
||||
struct rtnl_link_stats64* (*ndo_get_stats64)(struct net_device *dev,
|
||||
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,
|
||||
@@ -728,6 +741,8 @@ struct net_device_ops {
|
||||
unsigned short vid);
|
||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||
void (*ndo_poll_controller)(struct net_device *dev);
|
||||
int (*ndo_netpoll_setup)(struct net_device *dev,
|
||||
struct netpoll_info *info);
|
||||
void (*ndo_netpoll_cleanup)(struct net_device *dev);
|
||||
#endif
|
||||
int (*ndo_set_vf_mac)(struct net_device *dev,
|
||||
@@ -847,7 +862,8 @@ struct net_device {
|
||||
#define NETIF_F_FSO (SKB_GSO_FCOE << 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)
|
||||
#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)
|
||||
@@ -908,6 +924,7 @@ struct net_device {
|
||||
|
||||
/* Interface address info. */
|
||||
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 short dev_id; /* for shared network cards */
|
||||
|
||||
@@ -957,6 +974,8 @@ struct net_device {
|
||||
#endif
|
||||
|
||||
struct netdev_queue rx_queue;
|
||||
rx_handler_func_t *rx_handler;
|
||||
void *rx_handler_data;
|
||||
|
||||
struct netdev_queue *_tx ____cacheline_aligned_in_smp;
|
||||
|
||||
@@ -1024,10 +1043,6 @@ struct net_device {
|
||||
/* mid-layer private */
|
||||
void *ml_priv;
|
||||
|
||||
/* bridge stuff */
|
||||
struct net_bridge_port *br_port;
|
||||
/* macvlan */
|
||||
struct macvlan_port *macvlan_port;
|
||||
/* GARP */
|
||||
struct garp_port *garp_port;
|
||||
|
||||
@@ -1057,6 +1072,9 @@ struct net_device {
|
||||
#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;
|
||||
};
|
||||
#define to_net_dev(d) container_of(d, struct net_device, dev)
|
||||
|
||||
@@ -1087,11 +1105,7 @@ static inline void netdev_for_each_tx_queue(struct net_device *dev,
|
||||
static inline
|
||||
struct net *dev_net(const struct net_device *dev)
|
||||
{
|
||||
#ifdef CONFIG_NET_NS
|
||||
return dev->nd_net;
|
||||
#else
|
||||
return &init_net;
|
||||
#endif
|
||||
return read_pnet(&dev->nd_net);
|
||||
}
|
||||
|
||||
static inline
|
||||
@@ -1272,8 +1286,8 @@ extern void dev_add_pack(struct packet_type *pt);
|
||||
extern void dev_remove_pack(struct packet_type *pt);
|
||||
extern void __dev_remove_pack(struct packet_type *pt);
|
||||
|
||||
extern struct net_device *dev_get_by_flags(struct net *net, unsigned short flags,
|
||||
unsigned short mask);
|
||||
extern struct net_device *dev_get_by_flags_rcu(struct net *net, unsigned short flags,
|
||||
unsigned short mask);
|
||||
extern struct net_device *dev_get_by_name(struct net *net, const char *name);
|
||||
extern struct net_device *dev_get_by_name_rcu(struct net *net, const char *name);
|
||||
extern struct net_device *__dev_get_by_name(struct net *net, const char *name);
|
||||
@@ -1696,6 +1710,11 @@ static inline void napi_free_frags(struct napi_struct *napi)
|
||||
napi->skb = NULL;
|
||||
}
|
||||
|
||||
extern int netdev_rx_handler_register(struct net_device *dev,
|
||||
rx_handler_func_t *rx_handler,
|
||||
void *rx_handler_data);
|
||||
extern void netdev_rx_handler_unregister(struct net_device *dev);
|
||||
|
||||
extern void netif_nit_deliver(struct sk_buff *skb);
|
||||
extern int dev_valid_name(const char *name);
|
||||
extern int dev_ioctl(struct net *net, unsigned int cmd, void __user *);
|
||||
@@ -1775,6 +1794,8 @@ extern void netif_carrier_on(struct net_device *dev);
|
||||
|
||||
extern void netif_carrier_off(struct net_device *dev);
|
||||
|
||||
extern void netif_notify_peers(struct net_device *dev);
|
||||
|
||||
/**
|
||||
* netif_dormant_on - mark device as dormant.
|
||||
* @dev: network device
|
||||
@@ -2119,8 +2140,10 @@ extern void netdev_features_change(struct net_device *dev);
|
||||
/* Load a device via the kmod */
|
||||
extern void dev_load(struct net *net, const char *name);
|
||||
extern void dev_mcast_init(void);
|
||||
extern const struct net_device_stats *dev_get_stats(struct net_device *dev);
|
||||
extern void dev_txq_stats_fold(const struct net_device *dev, struct net_device_stats *stats);
|
||||
extern struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev,
|
||||
struct rtnl_link_stats64 *storage);
|
||||
extern void dev_txq_stats_fold(const struct net_device *dev,
|
||||
struct rtnl_link_stats64 *stats);
|
||||
|
||||
extern int netdev_max_backlog;
|
||||
extern int netdev_tstamp_prequeue;
|
||||
@@ -2230,25 +2253,23 @@ static inline const char *netdev_name(const struct net_device *dev)
|
||||
return dev->name;
|
||||
}
|
||||
|
||||
#define netdev_printk(level, netdev, format, args...) \
|
||||
dev_printk(level, (netdev)->dev.parent, \
|
||||
"%s: " format, \
|
||||
netdev_name(netdev), ##args)
|
||||
|
||||
#define netdev_emerg(dev, format, args...) \
|
||||
netdev_printk(KERN_EMERG, dev, format, ##args)
|
||||
#define netdev_alert(dev, format, args...) \
|
||||
netdev_printk(KERN_ALERT, dev, format, ##args)
|
||||
#define netdev_crit(dev, format, args...) \
|
||||
netdev_printk(KERN_CRIT, dev, format, ##args)
|
||||
#define netdev_err(dev, format, args...) \
|
||||
netdev_printk(KERN_ERR, dev, format, ##args)
|
||||
#define netdev_warn(dev, format, args...) \
|
||||
netdev_printk(KERN_WARNING, dev, format, ##args)
|
||||
#define netdev_notice(dev, format, args...) \
|
||||
netdev_printk(KERN_NOTICE, dev, format, ##args)
|
||||
#define netdev_info(dev, format, args...) \
|
||||
netdev_printk(KERN_INFO, dev, format, ##args)
|
||||
extern int netdev_printk(const char *level, const struct net_device *dev,
|
||||
const char *format, ...)
|
||||
__attribute__ ((format (printf, 3, 4)));
|
||||
extern int netdev_emerg(const struct net_device *dev, const char *format, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
extern int netdev_alert(const struct net_device *dev, const char *format, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
extern int netdev_crit(const struct net_device *dev, const char *format, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
extern int netdev_err(const struct net_device *dev, const char *format, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
extern int netdev_warn(const struct net_device *dev, const char *format, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
extern int netdev_notice(const struct net_device *dev, const char *format, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
extern int netdev_info(const struct net_device *dev, const char *format, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
|
||||
#if defined(DEBUG)
|
||||
#define netdev_dbg(__dev, format, args...) \
|
||||
@@ -2296,20 +2317,26 @@ do { \
|
||||
netdev_printk(level, (dev), fmt, ##args); \
|
||||
} while (0)
|
||||
|
||||
#define netif_level(level, priv, type, dev, fmt, args...) \
|
||||
do { \
|
||||
if (netif_msg_##type(priv)) \
|
||||
netdev_##level(dev, fmt, ##args); \
|
||||
} while (0)
|
||||
|
||||
#define netif_emerg(priv, type, dev, fmt, args...) \
|
||||
netif_printk(priv, type, KERN_EMERG, dev, fmt, ##args)
|
||||
netif_level(emerg, priv, type, dev, fmt, ##args)
|
||||
#define netif_alert(priv, type, dev, fmt, args...) \
|
||||
netif_printk(priv, type, KERN_ALERT, dev, fmt, ##args)
|
||||
netif_level(alert, priv, type, dev, fmt, ##args)
|
||||
#define netif_crit(priv, type, dev, fmt, args...) \
|
||||
netif_printk(priv, type, KERN_CRIT, dev, fmt, ##args)
|
||||
netif_level(crit, priv, type, dev, fmt, ##args)
|
||||
#define netif_err(priv, type, dev, fmt, args...) \
|
||||
netif_printk(priv, type, KERN_ERR, dev, fmt, ##args)
|
||||
netif_level(err, priv, type, dev, fmt, ##args)
|
||||
#define netif_warn(priv, type, dev, fmt, args...) \
|
||||
netif_printk(priv, type, KERN_WARNING, dev, fmt, ##args)
|
||||
netif_level(warn, priv, type, dev, fmt, ##args)
|
||||
#define netif_notice(priv, type, dev, fmt, args...) \
|
||||
netif_printk(priv, type, KERN_NOTICE, dev, fmt, ##args)
|
||||
netif_level(notice, priv, type, dev, fmt, ##args)
|
||||
#define netif_info(priv, type, dev, fmt, args...) \
|
||||
netif_printk(priv, type, KERN_INFO, (dev), fmt, ##args)
|
||||
netif_level(info, priv, type, dev, fmt, ##args)
|
||||
|
||||
#if defined(DEBUG)
|
||||
#define netif_dbg(priv, type, dev, format, args...) \
|
||||
|
||||
@@ -3,11 +3,13 @@ header-y += nf_conntrack_tuple_common.h
|
||||
header-y += nfnetlink_conntrack.h
|
||||
header-y += nfnetlink_log.h
|
||||
header-y += nfnetlink_queue.h
|
||||
header-y += xt_CHECKSUM.h
|
||||
header-y += xt_CLASSIFY.h
|
||||
header-y += xt_CONNMARK.h
|
||||
header-y += xt_CONNSECMARK.h
|
||||
header-y += xt_CT.h
|
||||
header-y += xt_DSCP.h
|
||||
header-y += xt_IDLETIMER.h
|
||||
header-y += xt_LED.h
|
||||
header-y += xt_MARK.h
|
||||
header-y += xt_NFLOG.h
|
||||
@@ -18,17 +20,19 @@ header-y += xt_TCPMSS.h
|
||||
header-y += xt_TCPOPTSTRIP.h
|
||||
header-y += xt_TEE.h
|
||||
header-y += xt_TPROXY.h
|
||||
header-y += xt_cluster.h
|
||||
header-y += xt_comment.h
|
||||
header-y += xt_connbytes.h
|
||||
header-y += xt_connlimit.h
|
||||
header-y += xt_connmark.h
|
||||
header-y += xt_conntrack.h
|
||||
header-y += xt_cluster.h
|
||||
header-y += xt_cpu.h
|
||||
header-y += xt_dccp.h
|
||||
header-y += xt_dscp.h
|
||||
header-y += xt_esp.h
|
||||
header-y += xt_hashlimit.h
|
||||
header-y += xt_iprange.h
|
||||
header-y += xt_ipvs.h
|
||||
header-y += xt_helper.h
|
||||
header-y += xt_length.h
|
||||
header-y += xt_limit.h
|
||||
|
||||
@@ -76,6 +76,10 @@ enum ip_conntrack_status {
|
||||
/* Conntrack is a template */
|
||||
IPS_TEMPLATE_BIT = 11,
|
||||
IPS_TEMPLATE = (1 << IPS_TEMPLATE_BIT),
|
||||
|
||||
/* Conntrack is a fake untracked entry */
|
||||
IPS_UNTRACKED_BIT = 12,
|
||||
IPS_UNTRACKED = (1 << IPS_UNTRACKED_BIT),
|
||||
};
|
||||
|
||||
/* Connection tracking event types */
|
||||
|
||||
@@ -89,6 +89,7 @@ enum nfulnl_attr_config {
|
||||
#define NFULNL_COPY_NONE 0x00
|
||||
#define NFULNL_COPY_META 0x01
|
||||
#define NFULNL_COPY_PACKET 0x02
|
||||
/* 0xff is reserved, don't use it for new copy modes. */
|
||||
|
||||
#define NFULNL_CFG_F_SEQ 0x0001
|
||||
#define NFULNL_CFG_F_SEQ_GLOBAL 0x0002
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
/* Header file for iptables ipt_CHECKSUM target
|
||||
*
|
||||
* (C) 2002 by Harald Welte <laforge@gnumonks.org>
|
||||
* (C) 2010 Red Hat Inc
|
||||
* Author: Michael S. Tsirkin <mst@redhat.com>
|
||||
*
|
||||
* This software is distributed under GNU GPL v2, 1991
|
||||
*/
|
||||
#ifndef _XT_CHECKSUM_TARGET_H
|
||||
#define _XT_CHECKSUM_TARGET_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define XT_CHECKSUM_OP_FILL 0x01 /* fill in checksum in IP header */
|
||||
|
||||
struct xt_CHECKSUM_info {
|
||||
__u8 operation; /* bitset of operations */
|
||||
};
|
||||
|
||||
#endif /* _XT_CHECKSUM_TARGET_H */
|
||||
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* linux/include/linux/netfilter/xt_IDLETIMER.h
|
||||
*
|
||||
* Header file for Xtables timer target module.
|
||||
*
|
||||
* Copyright (C) 2004, 2010 Nokia Corporation
|
||||
* Written by Timo Teras <ext-timo.teras@nokia.com>
|
||||
*
|
||||
* Converted to x_tables and forward-ported to 2.6.34
|
||||
* by Luciano Coelho <luciano.coelho@nokia.com>
|
||||
*
|
||||
* Contact: Luciano Coelho <luciano.coelho@nokia.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* version 2 as published by the Free Software Foundation.
|
||||
*
|
||||
* 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 St, Fifth Floor, Boston, MA
|
||||
* 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef _XT_IDLETIMER_H
|
||||
#define _XT_IDLETIMER_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define MAX_IDLETIMER_LABEL_SIZE 28
|
||||
|
||||
struct idletimer_tg_info {
|
||||
__u32 timeout;
|
||||
|
||||
char label[MAX_IDLETIMER_LABEL_SIZE];
|
||||
|
||||
/* for kernel module internal use only */
|
||||
struct idletimer_tg *timer __attribute((aligned(8)));
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,11 @@
|
||||
#ifndef _XT_CPU_H
|
||||
#define _XT_CPU_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
struct xt_cpu_info {
|
||||
__u32 cpu;
|
||||
__u32 invert;
|
||||
};
|
||||
|
||||
#endif /*_XT_CPU_H*/
|
||||
@@ -0,0 +1,27 @@
|
||||
#ifndef _XT_IPVS_H
|
||||
#define _XT_IPVS_H
|
||||
|
||||
enum {
|
||||
XT_IPVS_IPVS_PROPERTY = 1 << 0, /* all other options imply this one */
|
||||
XT_IPVS_PROTO = 1 << 1,
|
||||
XT_IPVS_VADDR = 1 << 2,
|
||||
XT_IPVS_VPORT = 1 << 3,
|
||||
XT_IPVS_DIR = 1 << 4,
|
||||
XT_IPVS_METHOD = 1 << 5,
|
||||
XT_IPVS_VPORTCTL = 1 << 6,
|
||||
XT_IPVS_MASK = (1 << 7) - 1,
|
||||
XT_IPVS_ONCE_MASK = XT_IPVS_MASK & ~XT_IPVS_IPVS_PROPERTY
|
||||
};
|
||||
|
||||
struct xt_ipvs_mtinfo {
|
||||
union nf_inet_addr vaddr, vmask;
|
||||
__be16 vport;
|
||||
__u8 l4proto;
|
||||
__u8 fwd_method;
|
||||
__be16 vportctl;
|
||||
|
||||
__u8 invert;
|
||||
__u8 bitmask;
|
||||
};
|
||||
|
||||
#endif /* _XT_IPVS_H */
|
||||
@@ -11,9 +11,9 @@ struct xt_quota_priv;
|
||||
struct xt_quota_info {
|
||||
u_int32_t flags;
|
||||
u_int32_t pad;
|
||||
aligned_u64 quota;
|
||||
|
||||
/* Used internally by the kernel */
|
||||
aligned_u64 quota;
|
||||
struct xt_quota_priv *master;
|
||||
};
|
||||
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
#define IPT_LOG_IPOPT 0x04 /* Log IP options */
|
||||
#define IPT_LOG_UID 0x08 /* Log UID owning local socket */
|
||||
#define IPT_LOG_NFLOG 0x10 /* Unsupported, don't reuse */
|
||||
#define IPT_LOG_MASK 0x1f
|
||||
#define IPT_LOG_MACDECODE 0x20 /* Decode MAC header */
|
||||
#define IPT_LOG_MASK 0x2f
|
||||
|
||||
struct ipt_log_info {
|
||||
unsigned char level;
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
#define IP6T_LOG_IPOPT 0x04 /* Log IP options */
|
||||
#define IP6T_LOG_UID 0x08 /* Log UID owning local socket */
|
||||
#define IP6T_LOG_NFLOG 0x10 /* Unsupported, don't use */
|
||||
#define IP6T_LOG_MASK 0x1f
|
||||
#define IP6T_LOG_MACDECODE 0x20 /* Decode MAC header */
|
||||
#define IP6T_LOG_MASK 0x2f
|
||||
|
||||
struct ip6t_log_info {
|
||||
unsigned char level;
|
||||
|
||||
+19
-5
@@ -46,9 +46,11 @@ 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);
|
||||
int __netpoll_setup(struct netpoll *np);
|
||||
int netpoll_setup(struct netpoll *np);
|
||||
int netpoll_trap(void);
|
||||
void netpoll_set_trap(int trap);
|
||||
void __netpoll_cleanup(struct netpoll *np);
|
||||
void netpoll_cleanup(struct netpoll *np);
|
||||
int __netpoll_rx(struct sk_buff *skb);
|
||||
void netpoll_send_skb(struct netpoll *np, struct sk_buff *skb);
|
||||
@@ -57,12 +59,15 @@ void netpoll_send_skb(struct netpoll *np, struct sk_buff *skb);
|
||||
#ifdef CONFIG_NETPOLL
|
||||
static inline bool netpoll_rx(struct sk_buff *skb)
|
||||
{
|
||||
struct netpoll_info *npinfo = skb->dev->npinfo;
|
||||
struct netpoll_info *npinfo;
|
||||
unsigned long flags;
|
||||
bool ret = false;
|
||||
|
||||
rcu_read_lock_bh();
|
||||
npinfo = rcu_dereference_bh(skb->dev->npinfo);
|
||||
|
||||
if (!npinfo || (list_empty(&npinfo->rx_np) && !npinfo->rx_flags))
|
||||
return false;
|
||||
goto out;
|
||||
|
||||
spin_lock_irqsave(&npinfo->rx_lock, flags);
|
||||
/* check rx_flags again with the lock held */
|
||||
@@ -70,12 +75,14 @@ static inline bool netpoll_rx(struct sk_buff *skb)
|
||||
ret = true;
|
||||
spin_unlock_irqrestore(&npinfo->rx_lock, flags);
|
||||
|
||||
out:
|
||||
rcu_read_unlock_bh();
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline int netpoll_rx_on(struct sk_buff *skb)
|
||||
{
|
||||
struct netpoll_info *npinfo = skb->dev->npinfo;
|
||||
struct netpoll_info *npinfo = rcu_dereference_bh(skb->dev->npinfo);
|
||||
|
||||
return npinfo && (!list_empty(&npinfo->rx_np) || npinfo->rx_flags);
|
||||
}
|
||||
@@ -91,7 +98,6 @@ static inline void *netpoll_poll_lock(struct napi_struct *napi)
|
||||
{
|
||||
struct net_device *dev = napi->dev;
|
||||
|
||||
rcu_read_lock(); /* deal with race on ->npinfo */
|
||||
if (dev && dev->npinfo) {
|
||||
spin_lock(&napi->poll_lock);
|
||||
napi->poll_owner = smp_processor_id();
|
||||
@@ -108,7 +114,11 @@ static inline void netpoll_poll_unlock(void *have)
|
||||
napi->poll_owner = -1;
|
||||
spin_unlock(&napi->poll_lock);
|
||||
}
|
||||
rcu_read_unlock();
|
||||
}
|
||||
|
||||
static inline int netpoll_tx_running(struct net_device *dev)
|
||||
{
|
||||
return irqs_disabled();
|
||||
}
|
||||
|
||||
#else
|
||||
@@ -134,6 +144,10 @@ static inline void netpoll_poll_unlock(void *have)
|
||||
static inline void netpoll_netdev_init(struct net_device *dev)
|
||||
{
|
||||
}
|
||||
static inline int netpoll_tx_running(struct net_device *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
+23
-1
@@ -132,7 +132,7 @@
|
||||
* %NL80211_ATTR_REG_RULE_POWER_MAX_ANT_GAIN and
|
||||
* %NL80211_ATTR_REG_RULE_POWER_MAX_EIRP.
|
||||
* @NL80211_CMD_REQ_SET_REG: ask the wireless core to set the regulatory domain
|
||||
* to the the specified ISO/IEC 3166-1 alpha2 country code. The core will
|
||||
* to the specified ISO/IEC 3166-1 alpha2 country code. The core will
|
||||
* store this as a valid request and then query userspace for it.
|
||||
*
|
||||
* @NL80211_CMD_GET_MESH_PARAMS: Get mesh networking properties for the
|
||||
@@ -725,6 +725,12 @@ enum nl80211_commands {
|
||||
* @NL80211_ATTR_AP_ISOLATE: (AP mode) Do not forward traffic between stations
|
||||
* connected to this BSS.
|
||||
*
|
||||
* @NL80211_ATTR_WIPHY_TX_POWER_SETTING: Transmit power setting type. See
|
||||
* &enum nl80211_tx_power_setting for possible values.
|
||||
* @NL80211_ATTR_WIPHY_TX_POWER_LEVEL: Transmit power level in signed mBm units.
|
||||
* This is used in association with @NL80211_ATTR_WIPHY_TX_POWER_SETTING
|
||||
* for non-automatic settings.
|
||||
*
|
||||
* @NL80211_ATTR_MAX: highest attribute number currently defined
|
||||
* @__NL80211_ATTR_AFTER_LAST: internal use
|
||||
*/
|
||||
@@ -882,6 +888,9 @@ enum nl80211_attrs {
|
||||
|
||||
NL80211_ATTR_AP_ISOLATE,
|
||||
|
||||
NL80211_ATTR_WIPHY_TX_POWER_SETTING,
|
||||
NL80211_ATTR_WIPHY_TX_POWER_LEVEL,
|
||||
|
||||
/* add attributes here, update the policy in nl80211.c */
|
||||
|
||||
__NL80211_ATTR_AFTER_LAST,
|
||||
@@ -1659,4 +1668,17 @@ enum nl80211_cqm_rssi_threshold_event {
|
||||
NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH,
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* enum nl80211_tx_power_setting - TX power adjustment
|
||||
* @NL80211_TX_POWER_AUTOMATIC: automatically determine transmit power
|
||||
* @NL80211_TX_POWER_LIMITED: limit TX power by the mBm parameter
|
||||
* @NL80211_TX_POWER_FIXED: fix TX power to the mBm parameter
|
||||
*/
|
||||
enum nl80211_tx_power_setting {
|
||||
NL80211_TX_POWER_AUTOMATIC,
|
||||
NL80211_TX_POWER_LIMITED,
|
||||
NL80211_TX_POWER_FIXED,
|
||||
};
|
||||
|
||||
#endif /* __LINUX_NL80211_H */
|
||||
|
||||
@@ -210,6 +210,7 @@ static inline int notifier_to_errno(int ret)
|
||||
#define NETDEV_POST_INIT 0x0010
|
||||
#define NETDEV_UNREGISTER_BATCH 0x0011
|
||||
#define NETDEV_BONDING_DESLAVE 0x0012
|
||||
#define NETDEV_NOTIFY_PEERS 0x0013
|
||||
|
||||
#define SYS_DOWN 0x0001 /* Notify of system down */
|
||||
#define SYS_RESTART SYS_DOWN
|
||||
|
||||
@@ -1494,6 +1494,9 @@
|
||||
#define PCI_DEVICE_ID_SBE_WANXL100 0x0301
|
||||
#define PCI_DEVICE_ID_SBE_WANXL200 0x0302
|
||||
#define PCI_DEVICE_ID_SBE_WANXL400 0x0104
|
||||
#define PCI_SUBDEVICE_ID_SBE_T3E3 0x0009
|
||||
#define PCI_SUBDEVICE_ID_SBE_2T3E3_P0 0x0901
|
||||
#define PCI_SUBDEVICE_ID_SBE_2T3E3_P1 0x0902
|
||||
|
||||
#define PCI_VENDOR_ID_TOSHIBA 0x1179
|
||||
#define PCI_DEVICE_ID_TOSHIBA_PICCOLO_1 0x0101
|
||||
@@ -2054,7 +2057,6 @@
|
||||
#define PCI_DEVICE_ID_NX2_57711E 0x1650
|
||||
#define PCI_DEVICE_ID_TIGON3_5705 0x1653
|
||||
#define PCI_DEVICE_ID_TIGON3_5705_2 0x1654
|
||||
#define PCI_DEVICE_ID_TIGON3_5720 0x1658
|
||||
#define PCI_DEVICE_ID_TIGON3_5721 0x1659
|
||||
#define PCI_DEVICE_ID_TIGON3_5722 0x165a
|
||||
#define PCI_DEVICE_ID_TIGON3_5723 0x165b
|
||||
@@ -2068,13 +2070,11 @@
|
||||
#define PCI_DEVICE_ID_TIGON3_5754M 0x1672
|
||||
#define PCI_DEVICE_ID_TIGON3_5755M 0x1673
|
||||
#define PCI_DEVICE_ID_TIGON3_5756 0x1674
|
||||
#define PCI_DEVICE_ID_TIGON3_5750 0x1676
|
||||
#define PCI_DEVICE_ID_TIGON3_5751 0x1677
|
||||
#define PCI_DEVICE_ID_TIGON3_5715 0x1678
|
||||
#define PCI_DEVICE_ID_TIGON3_5715S 0x1679
|
||||
#define PCI_DEVICE_ID_TIGON3_5754 0x167a
|
||||
#define PCI_DEVICE_ID_TIGON3_5755 0x167b
|
||||
#define PCI_DEVICE_ID_TIGON3_5750M 0x167c
|
||||
#define PCI_DEVICE_ID_TIGON3_5751M 0x167d
|
||||
#define PCI_DEVICE_ID_TIGON3_5751F 0x167e
|
||||
#define PCI_DEVICE_ID_TIGON3_5787F 0x167f
|
||||
|
||||
@@ -56,7 +56,7 @@ struct phonethdr {
|
||||
__be16 pn_length;
|
||||
__u8 pn_robj;
|
||||
__u8 pn_sobj;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
/* Common Phonet payload header */
|
||||
struct phonetmsg {
|
||||
@@ -98,7 +98,7 @@ struct sockaddr_pn {
|
||||
__u8 spn_dev;
|
||||
__u8 spn_resource;
|
||||
__u8 spn_zero[sizeof(struct sockaddr) - sizeof(sa_family_t) - 3];
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
/* Well known address */
|
||||
#define PN_DEV_PC 0x10
|
||||
|
||||
+23
-1
@@ -234,6 +234,8 @@ enum phy_state {
|
||||
PHY_RESUMING
|
||||
};
|
||||
|
||||
struct sk_buff;
|
||||
|
||||
/* phy_device: An instance of a PHY
|
||||
*
|
||||
* drv: Pointer to the driver for this PHY instance
|
||||
@@ -402,6 +404,26 @@ struct phy_driver {
|
||||
/* Clears up any memory if needed */
|
||||
void (*remove)(struct phy_device *phydev);
|
||||
|
||||
/* Handles SIOCSHWTSTAMP ioctl for hardware time stamping. */
|
||||
int (*hwtstamp)(struct phy_device *phydev, struct ifreq *ifr);
|
||||
|
||||
/*
|
||||
* Requests a Rx timestamp for 'skb'. If the skb is accepted,
|
||||
* the phy driver promises to deliver it using netif_rx() as
|
||||
* soon as a timestamp becomes available. One of the
|
||||
* PTP_CLASS_ values is passed in 'type'. The function must
|
||||
* return true if the skb is accepted for delivery.
|
||||
*/
|
||||
bool (*rxtstamp)(struct phy_device *dev, struct sk_buff *skb, int type);
|
||||
|
||||
/*
|
||||
* Requests a Tx timestamp for 'skb'. The phy driver promises
|
||||
* to deliver it to the socket's error queue as soon as a
|
||||
* timestamp becomes available. One of the PTP_CLASS_ values
|
||||
* is passed in 'type'.
|
||||
*/
|
||||
void (*txtstamp)(struct phy_device *dev, struct sk_buff *skb, int type);
|
||||
|
||||
struct device_driver driver;
|
||||
};
|
||||
#define to_phy_driver(d) container_of(d, struct phy_driver, driver)
|
||||
@@ -498,7 +520,7 @@ void phy_stop_machine(struct phy_device *phydev);
|
||||
int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd);
|
||||
int phy_ethtool_gset(struct phy_device *phydev, struct ethtool_cmd *cmd);
|
||||
int phy_mii_ioctl(struct phy_device *phydev,
|
||||
struct mii_ioctl_data *mii_data, int cmd);
|
||||
struct ifreq *ifr, int cmd);
|
||||
int phy_start_interrupts(struct phy_device *phydev);
|
||||
void phy_print_status(struct phy_device *phydev);
|
||||
struct phy_device* phy_device_create(struct mii_bus *bus, int addr, int phy_id);
|
||||
|
||||
@@ -0,0 +1,126 @@
|
||||
/*
|
||||
* PTP 1588 support
|
||||
*
|
||||
* This file implements a BPF that recognizes PTP event messages.
|
||||
*
|
||||
* Copyright (C) 2010 OMICRON electronics GmbH
|
||||
*
|
||||
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef _PTP_CLASSIFY_H_
|
||||
#define _PTP_CLASSIFY_H_
|
||||
|
||||
#include <linux/if_ether.h>
|
||||
#include <linux/if_vlan.h>
|
||||
#include <linux/filter.h>
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/in.h>
|
||||
#else
|
||||
#include <netinet/in.h>
|
||||
#endif
|
||||
|
||||
#define PTP_CLASS_NONE 0x00 /* not a PTP event message */
|
||||
#define PTP_CLASS_V1 0x01 /* protocol version 1 */
|
||||
#define PTP_CLASS_V2 0x02 /* protocol version 2 */
|
||||
#define PTP_CLASS_VMASK 0x0f /* max protocol version is 15 */
|
||||
#define PTP_CLASS_IPV4 0x10 /* event in an IPV4 UDP packet */
|
||||
#define PTP_CLASS_IPV6 0x20 /* event in an IPV6 UDP packet */
|
||||
#define PTP_CLASS_L2 0x30 /* event in a L2 packet */
|
||||
#define PTP_CLASS_VLAN 0x40 /* event in a VLAN tagged L2 packet */
|
||||
#define PTP_CLASS_PMASK 0xf0 /* mask for the packet type field */
|
||||
|
||||
#define PTP_CLASS_V1_IPV4 (PTP_CLASS_V1 | PTP_CLASS_IPV4)
|
||||
#define PTP_CLASS_V1_IPV6 (PTP_CLASS_V1 | PTP_CLASS_IPV6) /*probably DNE*/
|
||||
#define PTP_CLASS_V2_IPV4 (PTP_CLASS_V2 | PTP_CLASS_IPV4)
|
||||
#define PTP_CLASS_V2_IPV6 (PTP_CLASS_V2 | PTP_CLASS_IPV6)
|
||||
#define PTP_CLASS_V2_L2 (PTP_CLASS_V2 | PTP_CLASS_L2)
|
||||
#define PTP_CLASS_V2_VLAN (PTP_CLASS_V2 | PTP_CLASS_VLAN)
|
||||
|
||||
#define PTP_EV_PORT 319
|
||||
|
||||
#define OFF_ETYPE 12
|
||||
#define OFF_IHL 14
|
||||
#define OFF_FRAG 20
|
||||
#define OFF_PROTO4 23
|
||||
#define OFF_NEXT 6
|
||||
#define OFF_UDP_DST 2
|
||||
|
||||
#define IP6_HLEN 40
|
||||
#define UDP_HLEN 8
|
||||
|
||||
#define RELOFF_DST4 (ETH_HLEN + OFF_UDP_DST)
|
||||
#define OFF_DST6 (ETH_HLEN + IP6_HLEN + OFF_UDP_DST)
|
||||
#define OFF_PTP6 (ETH_HLEN + IP6_HLEN + UDP_HLEN)
|
||||
|
||||
#define OP_AND (BPF_ALU | BPF_AND | BPF_K)
|
||||
#define OP_JEQ (BPF_JMP | BPF_JEQ | BPF_K)
|
||||
#define OP_JSET (BPF_JMP | BPF_JSET | BPF_K)
|
||||
#define OP_LDB (BPF_LD | BPF_B | BPF_ABS)
|
||||
#define OP_LDH (BPF_LD | BPF_H | BPF_ABS)
|
||||
#define OP_LDHI (BPF_LD | BPF_H | BPF_IND)
|
||||
#define OP_LDX (BPF_LDX | BPF_B | BPF_MSH)
|
||||
#define OP_OR (BPF_ALU | BPF_OR | BPF_K)
|
||||
#define OP_RETA (BPF_RET | BPF_A)
|
||||
#define OP_RETK (BPF_RET | BPF_K)
|
||||
|
||||
static inline int ptp_filter_init(struct sock_filter *f, int len)
|
||||
{
|
||||
if (OP_LDH == f[0].code)
|
||||
return sk_chk_filter(f, len);
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define PTP_FILTER \
|
||||
{OP_LDH, 0, 0, OFF_ETYPE }, /* */ \
|
||||
{OP_JEQ, 0, 12, ETH_P_IP }, /* f goto L20 */ \
|
||||
{OP_LDB, 0, 0, OFF_PROTO4 }, /* */ \
|
||||
{OP_JEQ, 0, 9, IPPROTO_UDP }, /* f goto L10 */ \
|
||||
{OP_LDH, 0, 0, OFF_FRAG }, /* */ \
|
||||
{OP_JSET, 7, 0, 0x1fff }, /* t goto L11 */ \
|
||||
{OP_LDX, 0, 0, OFF_IHL }, /* */ \
|
||||
{OP_LDHI, 0, 0, RELOFF_DST4 }, /* */ \
|
||||
{OP_JEQ, 0, 4, PTP_EV_PORT }, /* f goto L12 */ \
|
||||
{OP_LDHI, 0, 0, ETH_HLEN + UDP_HLEN }, /* */ \
|
||||
{OP_AND, 0, 0, PTP_CLASS_VMASK }, /* */ \
|
||||
{OP_OR, 0, 0, PTP_CLASS_IPV4 }, /* */ \
|
||||
{OP_RETA, 0, 0, 0 }, /* */ \
|
||||
/*L1x*/ {OP_RETK, 0, 0, PTP_CLASS_NONE }, /* */ \
|
||||
/*L20*/ {OP_JEQ, 0, 9, ETH_P_IPV6 }, /* f goto L40 */ \
|
||||
{OP_LDB, 0, 0, ETH_HLEN + OFF_NEXT }, /* */ \
|
||||
{OP_JEQ, 0, 6, IPPROTO_UDP }, /* f goto L30 */ \
|
||||
{OP_LDH, 0, 0, OFF_DST6 }, /* */ \
|
||||
{OP_JEQ, 0, 4, PTP_EV_PORT }, /* f goto L31 */ \
|
||||
{OP_LDH, 0, 0, OFF_PTP6 }, /* */ \
|
||||
{OP_AND, 0, 0, PTP_CLASS_VMASK }, /* */ \
|
||||
{OP_OR, 0, 0, PTP_CLASS_IPV6 }, /* */ \
|
||||
{OP_RETA, 0, 0, 0 }, /* */ \
|
||||
/*L3x*/ {OP_RETK, 0, 0, PTP_CLASS_NONE }, /* */ \
|
||||
/*L40*/ {OP_JEQ, 0, 6, ETH_P_8021Q }, /* f goto L50 */ \
|
||||
{OP_LDH, 0, 0, OFF_ETYPE + 4 }, /* */ \
|
||||
{OP_JEQ, 0, 9, ETH_P_1588 }, /* f goto L60 */ \
|
||||
{OP_LDH, 0, 0, ETH_HLEN + VLAN_HLEN }, /* */ \
|
||||
{OP_AND, 0, 0, PTP_CLASS_VMASK }, /* */ \
|
||||
{OP_OR, 0, 0, PTP_CLASS_VLAN }, /* */ \
|
||||
{OP_RETA, 0, 0, 0 }, /* */ \
|
||||
/*L50*/ {OP_JEQ, 0, 4, ETH_P_1588 }, /* f goto L61 */ \
|
||||
{OP_LDH, 0, 0, ETH_HLEN }, /* */ \
|
||||
{OP_AND, 0, 0, PTP_CLASS_VMASK }, /* */ \
|
||||
{OP_OR, 0, 0, PTP_CLASS_L2 }, /* */ \
|
||||
{OP_RETA, 0, 0, 0 }, /* */ \
|
||||
/*L6x*/ {OP_RETK, 0, 0, PTP_CLASS_NONE },
|
||||
|
||||
#endif
|
||||
+6
-6
@@ -100,7 +100,7 @@
|
||||
struct rds_info_counter {
|
||||
u_int8_t name[32];
|
||||
u_int64_t value;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
#define RDS_INFO_CONNECTION_FLAG_SENDING 0x01
|
||||
#define RDS_INFO_CONNECTION_FLAG_CONNECTING 0x02
|
||||
@@ -115,7 +115,7 @@ struct rds_info_connection {
|
||||
__be32 faddr;
|
||||
u_int8_t transport[TRANSNAMSIZ]; /* null term ascii */
|
||||
u_int8_t flags;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
struct rds_info_flow {
|
||||
__be32 laddr;
|
||||
@@ -123,7 +123,7 @@ struct rds_info_flow {
|
||||
u_int32_t bytes;
|
||||
__be16 lport;
|
||||
__be16 fport;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
#define RDS_INFO_MESSAGE_FLAG_ACK 0x01
|
||||
#define RDS_INFO_MESSAGE_FLAG_FAST_ACK 0x02
|
||||
@@ -136,7 +136,7 @@ struct rds_info_message {
|
||||
__be16 lport;
|
||||
__be16 fport;
|
||||
u_int8_t flags;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
struct rds_info_socket {
|
||||
u_int32_t sndbuf;
|
||||
@@ -146,7 +146,7 @@ struct rds_info_socket {
|
||||
__be16 connected_port;
|
||||
u_int32_t rcvbuf;
|
||||
u_int64_t inum;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
struct rds_info_tcp_socket {
|
||||
__be32 local_addr;
|
||||
@@ -158,7 +158,7 @@ struct rds_info_tcp_socket {
|
||||
u_int32_t last_sent_nxt;
|
||||
u_int32_t last_expected_una;
|
||||
u_int32_t last_seen_una;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
#define RDS_IB_GID_LEN 16
|
||||
struct rds_info_rdma_connection {
|
||||
|
||||
@@ -282,6 +282,7 @@ enum rtattr_type_t {
|
||||
RTA_SESSION, /* no longer used */
|
||||
RTA_MP_ALGO, /* no longer used */
|
||||
RTA_TABLE,
|
||||
RTA_MARK,
|
||||
__RTA_MAX
|
||||
};
|
||||
|
||||
|
||||
+40
-40
@@ -61,7 +61,7 @@ typedef struct sctphdr {
|
||||
__be16 dest;
|
||||
__be32 vtag;
|
||||
__le32 checksum;
|
||||
} __attribute__((packed)) sctp_sctphdr_t;
|
||||
} __packed sctp_sctphdr_t;
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/skbuff.h>
|
||||
@@ -77,7 +77,7 @@ typedef struct sctp_chunkhdr {
|
||||
__u8 type;
|
||||
__u8 flags;
|
||||
__be16 length;
|
||||
} __attribute__((packed)) sctp_chunkhdr_t;
|
||||
} __packed sctp_chunkhdr_t;
|
||||
|
||||
|
||||
/* Section 3.2. Chunk Type Values.
|
||||
@@ -167,7 +167,7 @@ enum { SCTP_CHUNK_FLAG_T = 0x01 };
|
||||
typedef struct sctp_paramhdr {
|
||||
__be16 type;
|
||||
__be16 length;
|
||||
} __attribute__((packed)) sctp_paramhdr_t;
|
||||
} __packed sctp_paramhdr_t;
|
||||
|
||||
typedef enum {
|
||||
|
||||
@@ -228,12 +228,12 @@ typedef struct sctp_datahdr {
|
||||
__be16 ssn;
|
||||
__be32 ppid;
|
||||
__u8 payload[0];
|
||||
} __attribute__((packed)) sctp_datahdr_t;
|
||||
} __packed sctp_datahdr_t;
|
||||
|
||||
typedef struct sctp_data_chunk {
|
||||
sctp_chunkhdr_t chunk_hdr;
|
||||
sctp_datahdr_t data_hdr;
|
||||
} __attribute__((packed)) sctp_data_chunk_t;
|
||||
} __packed sctp_data_chunk_t;
|
||||
|
||||
/* DATA Chuck Specific Flags */
|
||||
enum {
|
||||
@@ -259,78 +259,78 @@ typedef struct sctp_inithdr {
|
||||
__be16 num_inbound_streams;
|
||||
__be32 initial_tsn;
|
||||
__u8 params[0];
|
||||
} __attribute__((packed)) sctp_inithdr_t;
|
||||
} __packed sctp_inithdr_t;
|
||||
|
||||
typedef struct sctp_init_chunk {
|
||||
sctp_chunkhdr_t chunk_hdr;
|
||||
sctp_inithdr_t init_hdr;
|
||||
} __attribute__((packed)) sctp_init_chunk_t;
|
||||
} __packed sctp_init_chunk_t;
|
||||
|
||||
|
||||
/* Section 3.3.2.1. IPv4 Address Parameter (5) */
|
||||
typedef struct sctp_ipv4addr_param {
|
||||
sctp_paramhdr_t param_hdr;
|
||||
struct in_addr addr;
|
||||
} __attribute__((packed)) sctp_ipv4addr_param_t;
|
||||
} __packed sctp_ipv4addr_param_t;
|
||||
|
||||
/* Section 3.3.2.1. IPv6 Address Parameter (6) */
|
||||
typedef struct sctp_ipv6addr_param {
|
||||
sctp_paramhdr_t param_hdr;
|
||||
struct in6_addr addr;
|
||||
} __attribute__((packed)) sctp_ipv6addr_param_t;
|
||||
} __packed sctp_ipv6addr_param_t;
|
||||
|
||||
/* Section 3.3.2.1 Cookie Preservative (9) */
|
||||
typedef struct sctp_cookie_preserve_param {
|
||||
sctp_paramhdr_t param_hdr;
|
||||
__be32 lifespan_increment;
|
||||
} __attribute__((packed)) sctp_cookie_preserve_param_t;
|
||||
} __packed sctp_cookie_preserve_param_t;
|
||||
|
||||
/* Section 3.3.2.1 Host Name Address (11) */
|
||||
typedef struct sctp_hostname_param {
|
||||
sctp_paramhdr_t param_hdr;
|
||||
uint8_t hostname[0];
|
||||
} __attribute__((packed)) sctp_hostname_param_t;
|
||||
} __packed sctp_hostname_param_t;
|
||||
|
||||
/* Section 3.3.2.1 Supported Address Types (12) */
|
||||
typedef struct sctp_supported_addrs_param {
|
||||
sctp_paramhdr_t param_hdr;
|
||||
__be16 types[0];
|
||||
} __attribute__((packed)) sctp_supported_addrs_param_t;
|
||||
} __packed sctp_supported_addrs_param_t;
|
||||
|
||||
/* Appendix A. ECN Capable (32768) */
|
||||
typedef struct sctp_ecn_capable_param {
|
||||
sctp_paramhdr_t param_hdr;
|
||||
} __attribute__((packed)) sctp_ecn_capable_param_t;
|
||||
} __packed sctp_ecn_capable_param_t;
|
||||
|
||||
/* ADDIP Section 3.2.6 Adaptation Layer Indication */
|
||||
typedef struct sctp_adaptation_ind_param {
|
||||
struct sctp_paramhdr param_hdr;
|
||||
__be32 adaptation_ind;
|
||||
} __attribute__((packed)) sctp_adaptation_ind_param_t;
|
||||
} __packed sctp_adaptation_ind_param_t;
|
||||
|
||||
/* ADDIP Section 4.2.7 Supported Extensions Parameter */
|
||||
typedef struct sctp_supported_ext_param {
|
||||
struct sctp_paramhdr param_hdr;
|
||||
__u8 chunks[0];
|
||||
} __attribute__((packed)) sctp_supported_ext_param_t;
|
||||
} __packed sctp_supported_ext_param_t;
|
||||
|
||||
/* AUTH Section 3.1 Random */
|
||||
typedef struct sctp_random_param {
|
||||
sctp_paramhdr_t param_hdr;
|
||||
__u8 random_val[0];
|
||||
} __attribute__((packed)) sctp_random_param_t;
|
||||
} __packed sctp_random_param_t;
|
||||
|
||||
/* AUTH Section 3.2 Chunk List */
|
||||
typedef struct sctp_chunks_param {
|
||||
sctp_paramhdr_t param_hdr;
|
||||
__u8 chunks[0];
|
||||
} __attribute__((packed)) sctp_chunks_param_t;
|
||||
} __packed sctp_chunks_param_t;
|
||||
|
||||
/* AUTH Section 3.3 HMAC Algorithm */
|
||||
typedef struct sctp_hmac_algo_param {
|
||||
sctp_paramhdr_t param_hdr;
|
||||
__be16 hmac_ids[0];
|
||||
} __attribute__((packed)) sctp_hmac_algo_param_t;
|
||||
} __packed sctp_hmac_algo_param_t;
|
||||
|
||||
/* RFC 2960. Section 3.3.3 Initiation Acknowledgement (INIT ACK) (2):
|
||||
* The INIT ACK chunk is used to acknowledge the initiation of an SCTP
|
||||
@@ -342,13 +342,13 @@ typedef sctp_init_chunk_t sctp_initack_chunk_t;
|
||||
typedef struct sctp_cookie_param {
|
||||
sctp_paramhdr_t p;
|
||||
__u8 body[0];
|
||||
} __attribute__((packed)) sctp_cookie_param_t;
|
||||
} __packed sctp_cookie_param_t;
|
||||
|
||||
/* Section 3.3.3.1 Unrecognized Parameters (8) */
|
||||
typedef struct sctp_unrecognized_param {
|
||||
sctp_paramhdr_t param_hdr;
|
||||
sctp_paramhdr_t unrecognized;
|
||||
} __attribute__((packed)) sctp_unrecognized_param_t;
|
||||
} __packed sctp_unrecognized_param_t;
|
||||
|
||||
|
||||
|
||||
@@ -363,7 +363,7 @@ typedef struct sctp_unrecognized_param {
|
||||
typedef struct sctp_gap_ack_block {
|
||||
__be16 start;
|
||||
__be16 end;
|
||||
} __attribute__((packed)) sctp_gap_ack_block_t;
|
||||
} __packed sctp_gap_ack_block_t;
|
||||
|
||||
typedef __be32 sctp_dup_tsn_t;
|
||||
|
||||
@@ -378,12 +378,12 @@ typedef struct sctp_sackhdr {
|
||||
__be16 num_gap_ack_blocks;
|
||||
__be16 num_dup_tsns;
|
||||
sctp_sack_variable_t variable[0];
|
||||
} __attribute__((packed)) sctp_sackhdr_t;
|
||||
} __packed sctp_sackhdr_t;
|
||||
|
||||
typedef struct sctp_sack_chunk {
|
||||
sctp_chunkhdr_t chunk_hdr;
|
||||
sctp_sackhdr_t sack_hdr;
|
||||
} __attribute__((packed)) sctp_sack_chunk_t;
|
||||
} __packed sctp_sack_chunk_t;
|
||||
|
||||
|
||||
/* RFC 2960. Section 3.3.5 Heartbeat Request (HEARTBEAT) (4):
|
||||
@@ -395,12 +395,12 @@ typedef struct sctp_sack_chunk {
|
||||
|
||||
typedef struct sctp_heartbeathdr {
|
||||
sctp_paramhdr_t info;
|
||||
} __attribute__((packed)) sctp_heartbeathdr_t;
|
||||
} __packed sctp_heartbeathdr_t;
|
||||
|
||||
typedef struct sctp_heartbeat_chunk {
|
||||
sctp_chunkhdr_t chunk_hdr;
|
||||
sctp_heartbeathdr_t hb_hdr;
|
||||
} __attribute__((packed)) sctp_heartbeat_chunk_t;
|
||||
} __packed sctp_heartbeat_chunk_t;
|
||||
|
||||
|
||||
/* For the abort and shutdown ACK we must carry the init tag in the
|
||||
@@ -409,7 +409,7 @@ typedef struct sctp_heartbeat_chunk {
|
||||
*/
|
||||
typedef struct sctp_abort_chunk {
|
||||
sctp_chunkhdr_t uh;
|
||||
} __attribute__((packed)) sctp_abort_chunk_t;
|
||||
} __packed sctp_abort_chunk_t;
|
||||
|
||||
|
||||
/* For the graceful shutdown we must carry the tag (in common header)
|
||||
@@ -417,12 +417,12 @@ typedef struct sctp_abort_chunk {
|
||||
*/
|
||||
typedef struct sctp_shutdownhdr {
|
||||
__be32 cum_tsn_ack;
|
||||
} __attribute__((packed)) sctp_shutdownhdr_t;
|
||||
} __packed sctp_shutdownhdr_t;
|
||||
|
||||
struct sctp_shutdown_chunk_t {
|
||||
sctp_chunkhdr_t chunk_hdr;
|
||||
sctp_shutdownhdr_t shutdown_hdr;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
/* RFC 2960. Section 3.3.10 Operation Error (ERROR) (9) */
|
||||
|
||||
@@ -430,12 +430,12 @@ typedef struct sctp_errhdr {
|
||||
__be16 cause;
|
||||
__be16 length;
|
||||
__u8 variable[0];
|
||||
} __attribute__((packed)) sctp_errhdr_t;
|
||||
} __packed sctp_errhdr_t;
|
||||
|
||||
typedef struct sctp_operr_chunk {
|
||||
sctp_chunkhdr_t chunk_hdr;
|
||||
sctp_errhdr_t err_hdr;
|
||||
} __attribute__((packed)) sctp_operr_chunk_t;
|
||||
} __packed sctp_operr_chunk_t;
|
||||
|
||||
/* RFC 2960 3.3.10 - Operation Error
|
||||
*
|
||||
@@ -525,7 +525,7 @@ typedef struct sctp_ecnehdr {
|
||||
typedef struct sctp_ecne_chunk {
|
||||
sctp_chunkhdr_t chunk_hdr;
|
||||
sctp_ecnehdr_t ence_hdr;
|
||||
} __attribute__((packed)) sctp_ecne_chunk_t;
|
||||
} __packed sctp_ecne_chunk_t;
|
||||
|
||||
/* RFC 2960. Appendix A. Explicit Congestion Notification.
|
||||
* Congestion Window Reduced (CWR) (13)
|
||||
@@ -537,7 +537,7 @@ typedef struct sctp_cwrhdr {
|
||||
typedef struct sctp_cwr_chunk {
|
||||
sctp_chunkhdr_t chunk_hdr;
|
||||
sctp_cwrhdr_t cwr_hdr;
|
||||
} __attribute__((packed)) sctp_cwr_chunk_t;
|
||||
} __packed sctp_cwr_chunk_t;
|
||||
|
||||
/* PR-SCTP
|
||||
* 3.2 Forward Cumulative TSN Chunk Definition (FORWARD TSN)
|
||||
@@ -588,17 +588,17 @@ typedef struct sctp_cwr_chunk {
|
||||
struct sctp_fwdtsn_skip {
|
||||
__be16 stream;
|
||||
__be16 ssn;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
struct sctp_fwdtsn_hdr {
|
||||
__be32 new_cum_tsn;
|
||||
struct sctp_fwdtsn_skip skip[0];
|
||||
} __attribute((packed));
|
||||
} __packed;
|
||||
|
||||
struct sctp_fwdtsn_chunk {
|
||||
struct sctp_chunkhdr chunk_hdr;
|
||||
struct sctp_fwdtsn_hdr fwdtsn_hdr;
|
||||
} __attribute((packed));
|
||||
} __packed;
|
||||
|
||||
|
||||
/* ADDIP
|
||||
@@ -636,17 +636,17 @@ struct sctp_fwdtsn_chunk {
|
||||
typedef struct sctp_addip_param {
|
||||
sctp_paramhdr_t param_hdr;
|
||||
__be32 crr_id;
|
||||
} __attribute__((packed)) sctp_addip_param_t;
|
||||
} __packed sctp_addip_param_t;
|
||||
|
||||
typedef struct sctp_addiphdr {
|
||||
__be32 serial;
|
||||
__u8 params[0];
|
||||
} __attribute__((packed)) sctp_addiphdr_t;
|
||||
} __packed sctp_addiphdr_t;
|
||||
|
||||
typedef struct sctp_addip_chunk {
|
||||
sctp_chunkhdr_t chunk_hdr;
|
||||
sctp_addiphdr_t addip_hdr;
|
||||
} __attribute__((packed)) sctp_addip_chunk_t;
|
||||
} __packed sctp_addip_chunk_t;
|
||||
|
||||
/* AUTH
|
||||
* Section 4.1 Authentication Chunk (AUTH)
|
||||
@@ -701,11 +701,11 @@ typedef struct sctp_authhdr {
|
||||
__be16 shkey_id;
|
||||
__be16 hmac_id;
|
||||
__u8 hmac[0];
|
||||
} __attribute__((packed)) sctp_authhdr_t;
|
||||
} __packed sctp_authhdr_t;
|
||||
|
||||
typedef struct sctp_auth_chunk {
|
||||
sctp_chunkhdr_t chunk_hdr;
|
||||
sctp_authhdr_t auth_hdr;
|
||||
} __attribute__((packed)) sctp_auth_chunk_t;
|
||||
} __packed sctp_auth_chunk_t;
|
||||
|
||||
#endif /* __LINUX_SCTP_H__ */
|
||||
|
||||
+64
-6
@@ -169,6 +169,7 @@ struct skb_shared_hwtstamps {
|
||||
* @software: generate software time stamp
|
||||
* @in_progress: device driver is going to provide
|
||||
* hardware time stamp
|
||||
* @prevent_sk_orphan: make sk reference available on driver level
|
||||
* @flags: all shared_tx flags
|
||||
*
|
||||
* These flags are attached to packets as part of the
|
||||
@@ -178,7 +179,8 @@ union skb_shared_tx {
|
||||
struct {
|
||||
__u8 hardware:1,
|
||||
software:1,
|
||||
in_progress:1;
|
||||
in_progress:1,
|
||||
prevent_sk_orphan:1;
|
||||
};
|
||||
__u8 flags;
|
||||
};
|
||||
@@ -202,10 +204,11 @@ struct skb_shared_info {
|
||||
*/
|
||||
atomic_t dataref;
|
||||
|
||||
skb_frag_t frags[MAX_SKB_FRAGS];
|
||||
/* 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];
|
||||
};
|
||||
|
||||
/* We divide dataref into two halves. The higher 16 bits hold references
|
||||
@@ -1414,12 +1417,14 @@ static inline int skb_network_offset(const struct sk_buff *skb)
|
||||
*
|
||||
* Various parts of the networking layer expect at least 32 bytes of
|
||||
* headroom, you should not reduce this.
|
||||
* With RPS, we raised NET_SKB_PAD to 64 so that get_rps_cpus() fetches span
|
||||
* a 64 bytes aligned block to fit modern (>= 64 bytes) cache line sizes
|
||||
*
|
||||
* Using max(32, L1_CACHE_BYTES) makes sense (especially with RPS)
|
||||
* to reduce average number of cache lines per packet.
|
||||
* get_rps_cpus() for example only access one 64 bytes aligned block :
|
||||
* NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8)
|
||||
*/
|
||||
#ifndef NET_SKB_PAD
|
||||
#define NET_SKB_PAD 64
|
||||
#define NET_SKB_PAD max(32, L1_CACHE_BYTES)
|
||||
#endif
|
||||
|
||||
extern int ___pskb_trim(struct sk_buff *skb, unsigned int len);
|
||||
@@ -1931,6 +1936,36 @@ static inline ktime_t net_invalid_timestamp(void)
|
||||
return ktime_set(0, 0);
|
||||
}
|
||||
|
||||
extern void skb_timestamping_init(void);
|
||||
|
||||
#ifdef CONFIG_NETWORK_PHY_TIMESTAMPING
|
||||
|
||||
extern void skb_clone_tx_timestamp(struct sk_buff *skb);
|
||||
extern bool skb_defer_rx_timestamp(struct sk_buff *skb);
|
||||
|
||||
#else /* CONFIG_NETWORK_PHY_TIMESTAMPING */
|
||||
|
||||
static inline void skb_clone_tx_timestamp(struct sk_buff *skb)
|
||||
{
|
||||
}
|
||||
|
||||
static inline bool skb_defer_rx_timestamp(struct sk_buff *skb)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif /* !CONFIG_NETWORK_PHY_TIMESTAMPING */
|
||||
|
||||
/**
|
||||
* skb_complete_tx_timestamp() - deliver cloned skb with tx timestamps
|
||||
*
|
||||
* @skb: clone of the the original outgoing packet
|
||||
* @hwtstamps: hardware time stamps
|
||||
*
|
||||
*/
|
||||
void skb_complete_tx_timestamp(struct sk_buff *skb,
|
||||
struct skb_shared_hwtstamps *hwtstamps);
|
||||
|
||||
/**
|
||||
* skb_tstamp_tx - queue clone of skb with send time stamps
|
||||
* @orig_skb: the original outgoing packet
|
||||
@@ -1945,6 +1980,28 @@ static inline ktime_t net_invalid_timestamp(void)
|
||||
extern void skb_tstamp_tx(struct sk_buff *orig_skb,
|
||||
struct skb_shared_hwtstamps *hwtstamps);
|
||||
|
||||
static inline void sw_tx_timestamp(struct sk_buff *skb)
|
||||
{
|
||||
union skb_shared_tx *shtx = skb_tx(skb);
|
||||
if (shtx->software && !shtx->in_progress)
|
||||
skb_tstamp_tx(skb, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*
|
||||
* @skb: A socket buffer.
|
||||
*/
|
||||
static inline void skb_tx_timestamp(struct sk_buff *skb)
|
||||
{
|
||||
skb_clone_tx_timestamp(skb);
|
||||
sw_tx_timestamp(skb);
|
||||
}
|
||||
|
||||
extern __sum16 __skb_checksum_complete_head(struct sk_buff *skb, int len);
|
||||
extern __sum16 __skb_checksum_complete(struct sk_buff *skb);
|
||||
|
||||
@@ -2132,7 +2189,8 @@ static inline bool skb_warn_if_lro(const struct sk_buff *skb)
|
||||
/* LRO sets gso_size but not gso_type, whereas if GSO is really
|
||||
* wanted then gso_type will be set. */
|
||||
struct skb_shared_info *shinfo = skb_shinfo(skb);
|
||||
if (shinfo->gso_size != 0 && unlikely(shinfo->gso_type == 0)) {
|
||||
if (skb_is_nonlinear(skb) && shinfo->gso_size != 0 &&
|
||||
unlikely(shinfo->gso_type == 0)) {
|
||||
__skb_warn_lro_forwarding(skb);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -229,6 +229,7 @@ enum
|
||||
LINUX_MIB_TCPBACKLOGDROP,
|
||||
LINUX_MIB_TCPMINTTLDROP, /* RFC 5082 */
|
||||
LINUX_MIB_TCPDEFERACCEPTDROP,
|
||||
LINUX_MIB_IPRPFILTER, /* IP Reverse Path Filter (rp_filter) */
|
||||
__LINUX_MIB_MAX
|
||||
};
|
||||
|
||||
|
||||
@@ -24,6 +24,9 @@ struct __kernel_sockaddr_storage {
|
||||
#include <linux/types.h> /* pid_t */
|
||||
#include <linux/compiler.h> /* __user */
|
||||
|
||||
struct pid;
|
||||
struct cred;
|
||||
|
||||
#define __sockaddr_check_size(size) \
|
||||
BUILD_BUG_ON(((size) > sizeof(struct __kernel_sockaddr_storage)))
|
||||
|
||||
@@ -309,6 +312,8 @@ struct ucred {
|
||||
#define IPX_TYPE 1
|
||||
|
||||
#ifdef __KERNEL__
|
||||
extern void cred_to_ucred(struct pid *pid, const struct cred *cred, struct ucred *ucred);
|
||||
|
||||
extern int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len);
|
||||
extern int memcpy_fromiovecend(unsigned char *kdata, const struct iovec *iov,
|
||||
int offset, int len);
|
||||
|
||||
+1
-158
@@ -167,7 +167,7 @@ struct ssb_device {
|
||||
* is an optimization. */
|
||||
const struct ssb_bus_ops *ops;
|
||||
|
||||
struct device *dev;
|
||||
struct device *dev, *dma_dev;
|
||||
|
||||
struct ssb_bus *bus;
|
||||
struct ssb_device_id id;
|
||||
@@ -470,14 +470,6 @@ extern u32 ssb_dma_translation(struct ssb_device *dev);
|
||||
#define SSB_DMA_TRANSLATION_MASK 0xC0000000
|
||||
#define SSB_DMA_TRANSLATION_SHIFT 30
|
||||
|
||||
extern int ssb_dma_set_mask(struct ssb_device *dev, u64 mask);
|
||||
|
||||
extern void * ssb_dma_alloc_consistent(struct ssb_device *dev, size_t size,
|
||||
dma_addr_t *dma_handle, gfp_t gfp_flags);
|
||||
extern void ssb_dma_free_consistent(struct ssb_device *dev, size_t size,
|
||||
void *vaddr, dma_addr_t dma_handle,
|
||||
gfp_t gfp_flags);
|
||||
|
||||
static inline void __cold __ssb_dma_not_implemented(struct ssb_device *dev)
|
||||
{
|
||||
#ifdef CONFIG_SSB_DEBUG
|
||||
@@ -486,155 +478,6 @@ static inline void __cold __ssb_dma_not_implemented(struct ssb_device *dev)
|
||||
#endif /* DEBUG */
|
||||
}
|
||||
|
||||
static inline int ssb_dma_mapping_error(struct ssb_device *dev, dma_addr_t addr)
|
||||
{
|
||||
switch (dev->bus->bustype) {
|
||||
case SSB_BUSTYPE_PCI:
|
||||
#ifdef CONFIG_SSB_PCIHOST
|
||||
return pci_dma_mapping_error(dev->bus->host_pci, addr);
|
||||
#endif
|
||||
break;
|
||||
case SSB_BUSTYPE_SSB:
|
||||
return dma_mapping_error(dev->dev, addr);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
__ssb_dma_not_implemented(dev);
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
static inline dma_addr_t ssb_dma_map_single(struct ssb_device *dev, void *p,
|
||||
size_t size, enum dma_data_direction dir)
|
||||
{
|
||||
switch (dev->bus->bustype) {
|
||||
case SSB_BUSTYPE_PCI:
|
||||
#ifdef CONFIG_SSB_PCIHOST
|
||||
return pci_map_single(dev->bus->host_pci, p, size, dir);
|
||||
#endif
|
||||
break;
|
||||
case SSB_BUSTYPE_SSB:
|
||||
return dma_map_single(dev->dev, p, size, dir);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
__ssb_dma_not_implemented(dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void ssb_dma_unmap_single(struct ssb_device *dev, dma_addr_t dma_addr,
|
||||
size_t size, enum dma_data_direction dir)
|
||||
{
|
||||
switch (dev->bus->bustype) {
|
||||
case SSB_BUSTYPE_PCI:
|
||||
#ifdef CONFIG_SSB_PCIHOST
|
||||
pci_unmap_single(dev->bus->host_pci, dma_addr, size, dir);
|
||||
return;
|
||||
#endif
|
||||
break;
|
||||
case SSB_BUSTYPE_SSB:
|
||||
dma_unmap_single(dev->dev, dma_addr, size, dir);
|
||||
return;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
__ssb_dma_not_implemented(dev);
|
||||
}
|
||||
|
||||
static inline void ssb_dma_sync_single_for_cpu(struct ssb_device *dev,
|
||||
dma_addr_t dma_addr,
|
||||
size_t size,
|
||||
enum dma_data_direction dir)
|
||||
{
|
||||
switch (dev->bus->bustype) {
|
||||
case SSB_BUSTYPE_PCI:
|
||||
#ifdef CONFIG_SSB_PCIHOST
|
||||
pci_dma_sync_single_for_cpu(dev->bus->host_pci, dma_addr,
|
||||
size, dir);
|
||||
return;
|
||||
#endif
|
||||
break;
|
||||
case SSB_BUSTYPE_SSB:
|
||||
dma_sync_single_for_cpu(dev->dev, dma_addr, size, dir);
|
||||
return;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
__ssb_dma_not_implemented(dev);
|
||||
}
|
||||
|
||||
static inline void ssb_dma_sync_single_for_device(struct ssb_device *dev,
|
||||
dma_addr_t dma_addr,
|
||||
size_t size,
|
||||
enum dma_data_direction dir)
|
||||
{
|
||||
switch (dev->bus->bustype) {
|
||||
case SSB_BUSTYPE_PCI:
|
||||
#ifdef CONFIG_SSB_PCIHOST
|
||||
pci_dma_sync_single_for_device(dev->bus->host_pci, dma_addr,
|
||||
size, dir);
|
||||
return;
|
||||
#endif
|
||||
break;
|
||||
case SSB_BUSTYPE_SSB:
|
||||
dma_sync_single_for_device(dev->dev, dma_addr, size, dir);
|
||||
return;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
__ssb_dma_not_implemented(dev);
|
||||
}
|
||||
|
||||
static inline void ssb_dma_sync_single_range_for_cpu(struct ssb_device *dev,
|
||||
dma_addr_t dma_addr,
|
||||
unsigned long offset,
|
||||
size_t size,
|
||||
enum dma_data_direction dir)
|
||||
{
|
||||
switch (dev->bus->bustype) {
|
||||
case SSB_BUSTYPE_PCI:
|
||||
#ifdef CONFIG_SSB_PCIHOST
|
||||
/* Just sync everything. That's all the PCI API can do. */
|
||||
pci_dma_sync_single_for_cpu(dev->bus->host_pci, dma_addr,
|
||||
offset + size, dir);
|
||||
return;
|
||||
#endif
|
||||
break;
|
||||
case SSB_BUSTYPE_SSB:
|
||||
dma_sync_single_range_for_cpu(dev->dev, dma_addr, offset,
|
||||
size, dir);
|
||||
return;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
__ssb_dma_not_implemented(dev);
|
||||
}
|
||||
|
||||
static inline void ssb_dma_sync_single_range_for_device(struct ssb_device *dev,
|
||||
dma_addr_t dma_addr,
|
||||
unsigned long offset,
|
||||
size_t size,
|
||||
enum dma_data_direction dir)
|
||||
{
|
||||
switch (dev->bus->bustype) {
|
||||
case SSB_BUSTYPE_PCI:
|
||||
#ifdef CONFIG_SSB_PCIHOST
|
||||
/* Just sync everything. That's all the PCI API can do. */
|
||||
pci_dma_sync_single_for_device(dev->bus->host_pci, dma_addr,
|
||||
offset + size, dir);
|
||||
return;
|
||||
#endif
|
||||
break;
|
||||
case SSB_BUSTYPE_SSB:
|
||||
dma_sync_single_range_for_device(dev->dev, dma_addr, offset,
|
||||
size, dir);
|
||||
return;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
__ssb_dma_not_implemented(dev);
|
||||
}
|
||||
|
||||
|
||||
#ifdef CONFIG_SSB_PCIHOST
|
||||
/* PCI-host wrapper driver */
|
||||
extern int ssb_pcihost_register(struct pci_driver *driver);
|
||||
|
||||
@@ -0,0 +1,140 @@
|
||||
#ifndef _LINUX_U64_STATS_SYNC_H
|
||||
#define _LINUX_U64_STATS_SYNC_H
|
||||
|
||||
/*
|
||||
* To properly implement 64bits network statistics on 32bit and 64bit hosts,
|
||||
* we provide a synchronization point, that is a noop on 64bit or UP kernels.
|
||||
*
|
||||
* Key points :
|
||||
* 1) Use a seqcount on SMP 32bits, with low overhead.
|
||||
* 2) Whole thing is a noop on 64bit arches or UP kernels.
|
||||
* 3) Write side must ensure mutual exclusion or one seqcount update could
|
||||
* be lost, thus blocking readers forever.
|
||||
* If this synchronization point is not a mutex, but a spinlock or
|
||||
* spinlock_bh() or disable_bh() :
|
||||
* 3.1) Write side should not sleep.
|
||||
* 3.2) Write side should not allow preemption.
|
||||
* 3.3) If applicable, interrupts should be disabled.
|
||||
*
|
||||
* 4) If reader fetches several counters, there is no guarantee the whole values
|
||||
* are consistent (remember point 1) : this is a noop on 64bit arches anyway)
|
||||
*
|
||||
* 5) readers are allowed to sleep or be preempted/interrupted : They perform
|
||||
* pure reads. But if they have to fetch many values, it's better to not allow
|
||||
* preemptions/interruptions to avoid many retries.
|
||||
*
|
||||
* 6) If counter might be written by an interrupt, readers should block interrupts.
|
||||
* (On UP, there is no seqcount_t protection, a reader allowing interrupts could
|
||||
* read partial values)
|
||||
*
|
||||
* 7) For softirq uses, readers can use u64_stats_fetch_begin_bh() and
|
||||
* u64_stats_fetch_retry_bh() helpers
|
||||
*
|
||||
* Usage :
|
||||
*
|
||||
* Stats producer (writer) should use following template granted it already got
|
||||
* an exclusive access to counters (a lock is already taken, or per cpu
|
||||
* data is used [in a non preemptable context])
|
||||
*
|
||||
* spin_lock_bh(...) or other synchronization to get exclusive access
|
||||
* ...
|
||||
* u64_stats_update_begin(&stats->syncp);
|
||||
* stats->bytes64 += len; // non atomic operation
|
||||
* stats->packets64++; // non atomic operation
|
||||
* u64_stats_update_end(&stats->syncp);
|
||||
*
|
||||
* While a consumer (reader) should use following template to get consistent
|
||||
* snapshot for each variable (but no guarantee on several ones)
|
||||
*
|
||||
* u64 tbytes, tpackets;
|
||||
* unsigned int start;
|
||||
*
|
||||
* do {
|
||||
* start = u64_stats_fetch_begin(&stats->syncp);
|
||||
* tbytes = stats->bytes64; // non atomic operation
|
||||
* tpackets = stats->packets64; // non atomic operation
|
||||
* } while (u64_stats_fetch_retry(&stats->syncp, start));
|
||||
*
|
||||
*
|
||||
* Example of use in drivers/net/loopback.c, using per_cpu containers,
|
||||
* in BH disabled context.
|
||||
*/
|
||||
#include <linux/seqlock.h>
|
||||
|
||||
struct u64_stats_sync {
|
||||
#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
|
||||
seqcount_t seq;
|
||||
#endif
|
||||
};
|
||||
|
||||
static void inline u64_stats_update_begin(struct u64_stats_sync *syncp)
|
||||
{
|
||||
#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
|
||||
write_seqcount_begin(&syncp->seq);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void inline u64_stats_update_end(struct u64_stats_sync *syncp)
|
||||
{
|
||||
#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
|
||||
write_seqcount_end(&syncp->seq);
|
||||
#endif
|
||||
}
|
||||
|
||||
static unsigned int inline u64_stats_fetch_begin(const struct u64_stats_sync *syncp)
|
||||
{
|
||||
#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
|
||||
return read_seqcount_begin(&syncp->seq);
|
||||
#else
|
||||
#if BITS_PER_LONG==32
|
||||
preempt_disable();
|
||||
#endif
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
static bool inline u64_stats_fetch_retry(const struct u64_stats_sync *syncp,
|
||||
unsigned int start)
|
||||
{
|
||||
#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
|
||||
return read_seqcount_retry(&syncp->seq, start);
|
||||
#else
|
||||
#if BITS_PER_LONG==32
|
||||
preempt_enable();
|
||||
#endif
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* In case softirq handlers can update u64 counters, readers can use following helpers
|
||||
* - SMP 32bit arches use seqcount protection, irq safe.
|
||||
* - UP 32bit must disable BH.
|
||||
* - 64bit have no problem atomically reading u64 values, irq safe.
|
||||
*/
|
||||
static unsigned int inline u64_stats_fetch_begin_bh(const struct u64_stats_sync *syncp)
|
||||
{
|
||||
#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
|
||||
return read_seqcount_begin(&syncp->seq);
|
||||
#else
|
||||
#if BITS_PER_LONG==32
|
||||
local_bh_disable();
|
||||
#endif
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
static bool inline u64_stats_fetch_retry_bh(const struct u64_stats_sync *syncp,
|
||||
unsigned int start)
|
||||
{
|
||||
#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
|
||||
return read_seqcount_retry(&syncp->seq, start);
|
||||
#else
|
||||
#if BITS_PER_LONG==32
|
||||
local_bh_enable();
|
||||
#endif
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif /* _LINUX_U64_STATS_SYNC_H */
|
||||
@@ -36,6 +36,9 @@ static inline void put_user_ns(struct user_namespace *ns)
|
||||
kref_put(&ns->kref, free_user_ns);
|
||||
}
|
||||
|
||||
uid_t user_ns_map_uid(struct user_namespace *to, const struct cred *cred, uid_t uid);
|
||||
gid_t user_ns_map_gid(struct user_namespace *to, const struct cred *cred, gid_t gid);
|
||||
|
||||
#else
|
||||
|
||||
static inline struct user_namespace *get_user_ns(struct user_namespace *ns)
|
||||
@@ -52,6 +55,17 @@ static inline void put_user_ns(struct user_namespace *ns)
|
||||
{
|
||||
}
|
||||
|
||||
static inline uid_t user_ns_map_uid(struct user_namespace *to,
|
||||
const struct cred *cred, uid_t uid)
|
||||
{
|
||||
return uid;
|
||||
}
|
||||
static inline gid_t user_ns_map_gid(struct user_namespace *to,
|
||||
const struct cred *cred, gid_t gid)
|
||||
{
|
||||
return gid;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_USER_H */
|
||||
|
||||
+11
-11
@@ -300,7 +300,7 @@ struct wlp_ie {
|
||||
__le16 cycle_param;
|
||||
__le16 acw_anchor_addr;
|
||||
u8 wssid_hash_list[];
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
static inline int wlp_ie_hash_length(struct wlp_ie *ie)
|
||||
{
|
||||
@@ -324,7 +324,7 @@ static inline void wlp_ie_set_hash_length(struct wlp_ie *ie, int hash_length)
|
||||
*/
|
||||
struct wlp_nonce {
|
||||
u8 data[16];
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
* WLP UUID
|
||||
@@ -336,7 +336,7 @@ struct wlp_nonce {
|
||||
*/
|
||||
struct wlp_uuid {
|
||||
u8 data[16];
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
|
||||
/**
|
||||
@@ -348,7 +348,7 @@ struct wlp_dev_type {
|
||||
u8 OUI[3];
|
||||
u8 OUIsubdiv;
|
||||
__le16 subID;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
* WLP frame header
|
||||
@@ -357,7 +357,7 @@ struct wlp_dev_type {
|
||||
struct wlp_frame_hdr {
|
||||
__le16 mux_hdr; /* WLP_PROTOCOL_ID */
|
||||
enum wlp_frame_type type:8;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
* WLP attribute field header
|
||||
@@ -368,7 +368,7 @@ struct wlp_frame_hdr {
|
||||
struct wlp_attr_hdr {
|
||||
__le16 type;
|
||||
__le16 length;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
* Device information commonly used together
|
||||
@@ -401,13 +401,13 @@ struct wlp_device_info {
|
||||
struct wlp_attr_##name { \
|
||||
struct wlp_attr_hdr hdr; \
|
||||
type name; \
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
#define wlp_attr_array(type, name) \
|
||||
struct wlp_attr_##name { \
|
||||
struct wlp_attr_hdr hdr; \
|
||||
type name[]; \
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
* WLP association attribute fields
|
||||
@@ -483,7 +483,7 @@ struct wlp_wss_info {
|
||||
struct wlp_attr_accept_enrl accept;
|
||||
struct wlp_attr_wss_sec_status sec_stat;
|
||||
struct wlp_attr_wss_bcast bcast;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
/* WLP WSS Information */
|
||||
wlp_attr_array(struct wlp_wss_info, wss_info)
|
||||
@@ -520,7 +520,7 @@ wlp_attr(u8, wlp_assc_err)
|
||||
struct wlp_frame_std_abbrv_hdr {
|
||||
struct wlp_frame_hdr hdr;
|
||||
u8 tag;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
* WLP association frames
|
||||
@@ -533,7 +533,7 @@ struct wlp_frame_assoc {
|
||||
struct wlp_attr_version version;
|
||||
struct wlp_attr_msg_type msg_type;
|
||||
u8 attr[];
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
/* Ethernet to dev address mapping */
|
||||
struct wlp_eda {
|
||||
|
||||
@@ -20,6 +20,7 @@ struct tcf_common {
|
||||
struct gnet_stats_queue tcfc_qstats;
|
||||
struct gnet_stats_rate_est tcfc_rate_est;
|
||||
spinlock_t tcfc_lock;
|
||||
struct rcu_head tcfc_rcu;
|
||||
};
|
||||
#define tcf_next common.tcfc_next
|
||||
#define tcf_index common.tcfc_index
|
||||
@@ -32,6 +33,7 @@ struct tcf_common {
|
||||
#define tcf_qstats common.tcfc_qstats
|
||||
#define tcf_rate_est common.tcfc_rate_est
|
||||
#define tcf_lock common.tcfc_lock
|
||||
#define tcf_rcu common.tcfc_rcu
|
||||
|
||||
struct tcf_police {
|
||||
struct tcf_common common;
|
||||
|
||||
@@ -23,7 +23,8 @@ struct unix_address {
|
||||
};
|
||||
|
||||
struct unix_skb_parms {
|
||||
struct ucred creds; /* Skb credentials */
|
||||
struct pid *pid; /* Skb credentials */
|
||||
const struct cred *cred;
|
||||
struct scm_fp_list *fp; /* Passed files */
|
||||
#ifdef CONFIG_SECURITY_NETWORK
|
||||
u32 secid; /* Security ID */
|
||||
@@ -31,7 +32,6 @@ struct unix_skb_parms {
|
||||
};
|
||||
|
||||
#define UNIXCB(skb) (*(struct unix_skb_parms *)&((skb)->cb))
|
||||
#define UNIXCREDS(skb) (&UNIXCB((skb)).creds)
|
||||
#define UNIXSID(skb) (&UNIXCB((skb)).secid)
|
||||
|
||||
#define unix_state_lock(s) spin_lock(&unix_sk(s)->lock)
|
||||
|
||||
@@ -84,7 +84,7 @@ enum {
|
||||
/* BD Address */
|
||||
typedef struct {
|
||||
__u8 b[6];
|
||||
} __attribute__((packed)) bdaddr_t;
|
||||
} __packed bdaddr_t;
|
||||
|
||||
#define BDADDR_ANY (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}})
|
||||
#define BDADDR_LOCAL (&(bdaddr_t) {{0, 0, 0, 0xff, 0xff, 0xff}})
|
||||
@@ -138,6 +138,7 @@ struct sock *bt_accept_dequeue(struct sock *parent, struct socket *newsock);
|
||||
struct bt_skb_cb {
|
||||
__u8 pkt_type;
|
||||
__u8 incoming;
|
||||
__u16 expect;
|
||||
__u8 tx_seq;
|
||||
__u8 retries;
|
||||
__u8 sar;
|
||||
|
||||
+95
-92
@@ -100,6 +100,9 @@ enum {
|
||||
#define HCISETACLMTU _IOW('H', 227, int)
|
||||
#define HCISETSCOMTU _IOW('H', 228, int)
|
||||
|
||||
#define HCIBLOCKADDR _IOW('H', 230, int)
|
||||
#define HCIUNBLOCKADDR _IOW('H', 231, int)
|
||||
|
||||
#define HCIINQUIRY _IOR('H', 240, int)
|
||||
|
||||
/* HCI timeouts */
|
||||
@@ -227,7 +230,7 @@ struct hci_cp_inquiry {
|
||||
__u8 lap[3];
|
||||
__u8 length;
|
||||
__u8 num_rsp;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_INQUIRY_CANCEL 0x0402
|
||||
|
||||
@@ -241,81 +244,81 @@ struct hci_cp_create_conn {
|
||||
__u8 pscan_mode;
|
||||
__le16 clock_offset;
|
||||
__u8 role_switch;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_DISCONNECT 0x0406
|
||||
struct hci_cp_disconnect {
|
||||
__le16 handle;
|
||||
__u8 reason;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_ADD_SCO 0x0407
|
||||
struct hci_cp_add_sco {
|
||||
__le16 handle;
|
||||
__le16 pkt_type;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_CREATE_CONN_CANCEL 0x0408
|
||||
struct hci_cp_create_conn_cancel {
|
||||
bdaddr_t bdaddr;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_ACCEPT_CONN_REQ 0x0409
|
||||
struct hci_cp_accept_conn_req {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 role;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_REJECT_CONN_REQ 0x040a
|
||||
struct hci_cp_reject_conn_req {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 reason;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_LINK_KEY_REPLY 0x040b
|
||||
struct hci_cp_link_key_reply {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 link_key[16];
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_LINK_KEY_NEG_REPLY 0x040c
|
||||
struct hci_cp_link_key_neg_reply {
|
||||
bdaddr_t bdaddr;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_PIN_CODE_REPLY 0x040d
|
||||
struct hci_cp_pin_code_reply {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 pin_len;
|
||||
__u8 pin_code[16];
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_PIN_CODE_NEG_REPLY 0x040e
|
||||
struct hci_cp_pin_code_neg_reply {
|
||||
bdaddr_t bdaddr;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_CHANGE_CONN_PTYPE 0x040f
|
||||
struct hci_cp_change_conn_ptype {
|
||||
__le16 handle;
|
||||
__le16 pkt_type;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_AUTH_REQUESTED 0x0411
|
||||
struct hci_cp_auth_requested {
|
||||
__le16 handle;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_SET_CONN_ENCRYPT 0x0413
|
||||
struct hci_cp_set_conn_encrypt {
|
||||
__le16 handle;
|
||||
__u8 encrypt;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_CHANGE_CONN_LINK_KEY 0x0415
|
||||
struct hci_cp_change_conn_link_key {
|
||||
__le16 handle;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_REMOTE_NAME_REQ 0x0419
|
||||
struct hci_cp_remote_name_req {
|
||||
@@ -323,28 +326,28 @@ struct hci_cp_remote_name_req {
|
||||
__u8 pscan_rep_mode;
|
||||
__u8 pscan_mode;
|
||||
__le16 clock_offset;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_REMOTE_NAME_REQ_CANCEL 0x041a
|
||||
struct hci_cp_remote_name_req_cancel {
|
||||
bdaddr_t bdaddr;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_READ_REMOTE_FEATURES 0x041b
|
||||
struct hci_cp_read_remote_features {
|
||||
__le16 handle;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_READ_REMOTE_EXT_FEATURES 0x041c
|
||||
struct hci_cp_read_remote_ext_features {
|
||||
__le16 handle;
|
||||
__u8 page;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_READ_REMOTE_VERSION 0x041d
|
||||
struct hci_cp_read_remote_version {
|
||||
__le16 handle;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_SETUP_SYNC_CONN 0x0428
|
||||
struct hci_cp_setup_sync_conn {
|
||||
@@ -355,7 +358,7 @@ struct hci_cp_setup_sync_conn {
|
||||
__le16 voice_setting;
|
||||
__u8 retrans_effort;
|
||||
__le16 pkt_type;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_ACCEPT_SYNC_CONN_REQ 0x0429
|
||||
struct hci_cp_accept_sync_conn_req {
|
||||
@@ -366,13 +369,13 @@ struct hci_cp_accept_sync_conn_req {
|
||||
__le16 content_format;
|
||||
__u8 retrans_effort;
|
||||
__le16 pkt_type;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_REJECT_SYNC_CONN_REQ 0x042a
|
||||
struct hci_cp_reject_sync_conn_req {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 reason;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_SNIFF_MODE 0x0803
|
||||
struct hci_cp_sniff_mode {
|
||||
@@ -381,59 +384,59 @@ struct hci_cp_sniff_mode {
|
||||
__le16 min_interval;
|
||||
__le16 attempt;
|
||||
__le16 timeout;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_EXIT_SNIFF_MODE 0x0804
|
||||
struct hci_cp_exit_sniff_mode {
|
||||
__le16 handle;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_ROLE_DISCOVERY 0x0809
|
||||
struct hci_cp_role_discovery {
|
||||
__le16 handle;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
struct hci_rp_role_discovery {
|
||||
__u8 status;
|
||||
__le16 handle;
|
||||
__u8 role;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_SWITCH_ROLE 0x080b
|
||||
struct hci_cp_switch_role {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 role;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_READ_LINK_POLICY 0x080c
|
||||
struct hci_cp_read_link_policy {
|
||||
__le16 handle;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
struct hci_rp_read_link_policy {
|
||||
__u8 status;
|
||||
__le16 handle;
|
||||
__le16 policy;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_WRITE_LINK_POLICY 0x080d
|
||||
struct hci_cp_write_link_policy {
|
||||
__le16 handle;
|
||||
__le16 policy;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
struct hci_rp_write_link_policy {
|
||||
__u8 status;
|
||||
__le16 handle;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_READ_DEF_LINK_POLICY 0x080e
|
||||
struct hci_rp_read_def_link_policy {
|
||||
__u8 status;
|
||||
__le16 policy;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_WRITE_DEF_LINK_POLICY 0x080f
|
||||
struct hci_cp_write_def_link_policy {
|
||||
__le16 policy;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_SNIFF_SUBRATE 0x0811
|
||||
struct hci_cp_sniff_subrate {
|
||||
@@ -441,12 +444,12 @@ struct hci_cp_sniff_subrate {
|
||||
__le16 max_latency;
|
||||
__le16 min_remote_timeout;
|
||||
__le16 min_local_timeout;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_SET_EVENT_MASK 0x0c01
|
||||
struct hci_cp_set_event_mask {
|
||||
__u8 mask[8];
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_RESET 0x0c03
|
||||
|
||||
@@ -455,7 +458,7 @@ struct hci_cp_set_event_flt {
|
||||
__u8 flt_type;
|
||||
__u8 cond_type;
|
||||
__u8 condition[0];
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
/* Filter types */
|
||||
#define HCI_FLT_CLEAR_ALL 0x00
|
||||
@@ -474,13 +477,13 @@ struct hci_cp_set_event_flt {
|
||||
#define HCI_OP_WRITE_LOCAL_NAME 0x0c13
|
||||
struct hci_cp_write_local_name {
|
||||
__u8 name[248];
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_READ_LOCAL_NAME 0x0c14
|
||||
struct hci_rp_read_local_name {
|
||||
__u8 status;
|
||||
__u8 name[248];
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_WRITE_CA_TIMEOUT 0x0c16
|
||||
|
||||
@@ -508,23 +511,23 @@ struct hci_rp_read_local_name {
|
||||
struct hci_rp_read_class_of_dev {
|
||||
__u8 status;
|
||||
__u8 dev_class[3];
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_WRITE_CLASS_OF_DEV 0x0c24
|
||||
struct hci_cp_write_class_of_dev {
|
||||
__u8 dev_class[3];
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_READ_VOICE_SETTING 0x0c25
|
||||
struct hci_rp_read_voice_setting {
|
||||
__u8 status;
|
||||
__le16 voice_setting;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_WRITE_VOICE_SETTING 0x0c26
|
||||
struct hci_cp_write_voice_setting {
|
||||
__le16 voice_setting;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_HOST_BUFFER_SIZE 0x0c33
|
||||
struct hci_cp_host_buffer_size {
|
||||
@@ -532,18 +535,18 @@ struct hci_cp_host_buffer_size {
|
||||
__u8 sco_mtu;
|
||||
__le16 acl_max_pkt;
|
||||
__le16 sco_max_pkt;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_READ_SSP_MODE 0x0c55
|
||||
struct hci_rp_read_ssp_mode {
|
||||
__u8 status;
|
||||
__u8 mode;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_WRITE_SSP_MODE 0x0c56
|
||||
struct hci_cp_write_ssp_mode {
|
||||
__u8 mode;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_READ_LOCAL_VERSION 0x1001
|
||||
struct hci_rp_read_local_version {
|
||||
@@ -553,19 +556,19 @@ struct hci_rp_read_local_version {
|
||||
__u8 lmp_ver;
|
||||
__le16 manufacturer;
|
||||
__le16 lmp_subver;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_READ_LOCAL_COMMANDS 0x1002
|
||||
struct hci_rp_read_local_commands {
|
||||
__u8 status;
|
||||
__u8 commands[64];
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_READ_LOCAL_FEATURES 0x1003
|
||||
struct hci_rp_read_local_features {
|
||||
__u8 status;
|
||||
__u8 features[8];
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_READ_LOCAL_EXT_FEATURES 0x1004
|
||||
struct hci_rp_read_local_ext_features {
|
||||
@@ -573,7 +576,7 @@ struct hci_rp_read_local_ext_features {
|
||||
__u8 page;
|
||||
__u8 max_page;
|
||||
__u8 features[8];
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_READ_BUFFER_SIZE 0x1005
|
||||
struct hci_rp_read_buffer_size {
|
||||
@@ -582,13 +585,13 @@ struct hci_rp_read_buffer_size {
|
||||
__u8 sco_mtu;
|
||||
__le16 acl_max_pkt;
|
||||
__le16 sco_max_pkt;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_OP_READ_BD_ADDR 0x1009
|
||||
struct hci_rp_read_bd_addr {
|
||||
__u8 status;
|
||||
bdaddr_t bdaddr;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
/* ---- HCI Events ---- */
|
||||
#define HCI_EV_INQUIRY_COMPLETE 0x01
|
||||
@@ -601,7 +604,7 @@ struct inquiry_info {
|
||||
__u8 pscan_mode;
|
||||
__u8 dev_class[3];
|
||||
__le16 clock_offset;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_CONN_COMPLETE 0x03
|
||||
struct hci_ev_conn_complete {
|
||||
@@ -610,54 +613,54 @@ struct hci_ev_conn_complete {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 link_type;
|
||||
__u8 encr_mode;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_CONN_REQUEST 0x04
|
||||
struct hci_ev_conn_request {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 dev_class[3];
|
||||
__u8 link_type;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_DISCONN_COMPLETE 0x05
|
||||
struct hci_ev_disconn_complete {
|
||||
__u8 status;
|
||||
__le16 handle;
|
||||
__u8 reason;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_AUTH_COMPLETE 0x06
|
||||
struct hci_ev_auth_complete {
|
||||
__u8 status;
|
||||
__le16 handle;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_REMOTE_NAME 0x07
|
||||
struct hci_ev_remote_name {
|
||||
__u8 status;
|
||||
bdaddr_t bdaddr;
|
||||
__u8 name[248];
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_ENCRYPT_CHANGE 0x08
|
||||
struct hci_ev_encrypt_change {
|
||||
__u8 status;
|
||||
__le16 handle;
|
||||
__u8 encrypt;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_CHANGE_LINK_KEY_COMPLETE 0x09
|
||||
struct hci_ev_change_link_key_complete {
|
||||
__u8 status;
|
||||
__le16 handle;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_REMOTE_FEATURES 0x0b
|
||||
struct hci_ev_remote_features {
|
||||
__u8 status;
|
||||
__le16 handle;
|
||||
__u8 features[8];
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_REMOTE_VERSION 0x0c
|
||||
struct hci_ev_remote_version {
|
||||
@@ -666,7 +669,7 @@ struct hci_ev_remote_version {
|
||||
__u8 lmp_ver;
|
||||
__le16 manufacturer;
|
||||
__le16 lmp_subver;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_QOS_SETUP_COMPLETE 0x0d
|
||||
struct hci_qos {
|
||||
@@ -675,38 +678,38 @@ struct hci_qos {
|
||||
__u32 peak_bandwidth;
|
||||
__u32 latency;
|
||||
__u32 delay_variation;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
struct hci_ev_qos_setup_complete {
|
||||
__u8 status;
|
||||
__le16 handle;
|
||||
struct hci_qos qos;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_CMD_COMPLETE 0x0e
|
||||
struct hci_ev_cmd_complete {
|
||||
__u8 ncmd;
|
||||
__le16 opcode;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_CMD_STATUS 0x0f
|
||||
struct hci_ev_cmd_status {
|
||||
__u8 status;
|
||||
__u8 ncmd;
|
||||
__le16 opcode;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_ROLE_CHANGE 0x12
|
||||
struct hci_ev_role_change {
|
||||
__u8 status;
|
||||
bdaddr_t bdaddr;
|
||||
__u8 role;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_NUM_COMP_PKTS 0x13
|
||||
struct hci_ev_num_comp_pkts {
|
||||
__u8 num_hndl;
|
||||
/* variable length part */
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_MODE_CHANGE 0x14
|
||||
struct hci_ev_mode_change {
|
||||
@@ -714,44 +717,44 @@ struct hci_ev_mode_change {
|
||||
__le16 handle;
|
||||
__u8 mode;
|
||||
__le16 interval;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_PIN_CODE_REQ 0x16
|
||||
struct hci_ev_pin_code_req {
|
||||
bdaddr_t bdaddr;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_LINK_KEY_REQ 0x17
|
||||
struct hci_ev_link_key_req {
|
||||
bdaddr_t bdaddr;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_LINK_KEY_NOTIFY 0x18
|
||||
struct hci_ev_link_key_notify {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 link_key[16];
|
||||
__u8 key_type;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_CLOCK_OFFSET 0x1c
|
||||
struct hci_ev_clock_offset {
|
||||
__u8 status;
|
||||
__le16 handle;
|
||||
__le16 clock_offset;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_PKT_TYPE_CHANGE 0x1d
|
||||
struct hci_ev_pkt_type_change {
|
||||
__u8 status;
|
||||
__le16 handle;
|
||||
__le16 pkt_type;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_PSCAN_REP_MODE 0x20
|
||||
struct hci_ev_pscan_rep_mode {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 pscan_rep_mode;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_INQUIRY_RESULT_WITH_RSSI 0x22
|
||||
struct inquiry_info_with_rssi {
|
||||
@@ -761,7 +764,7 @@ struct inquiry_info_with_rssi {
|
||||
__u8 dev_class[3];
|
||||
__le16 clock_offset;
|
||||
__s8 rssi;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
struct inquiry_info_with_rssi_and_pscan_mode {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 pscan_rep_mode;
|
||||
@@ -770,7 +773,7 @@ struct inquiry_info_with_rssi_and_pscan_mode {
|
||||
__u8 dev_class[3];
|
||||
__le16 clock_offset;
|
||||
__s8 rssi;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_REMOTE_EXT_FEATURES 0x23
|
||||
struct hci_ev_remote_ext_features {
|
||||
@@ -779,7 +782,7 @@ struct hci_ev_remote_ext_features {
|
||||
__u8 page;
|
||||
__u8 max_page;
|
||||
__u8 features[8];
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_SYNC_CONN_COMPLETE 0x2c
|
||||
struct hci_ev_sync_conn_complete {
|
||||
@@ -792,7 +795,7 @@ struct hci_ev_sync_conn_complete {
|
||||
__le16 rx_pkt_len;
|
||||
__le16 tx_pkt_len;
|
||||
__u8 air_mode;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_SYNC_CONN_CHANGED 0x2d
|
||||
struct hci_ev_sync_conn_changed {
|
||||
@@ -802,7 +805,7 @@ struct hci_ev_sync_conn_changed {
|
||||
__u8 retrans_window;
|
||||
__le16 rx_pkt_len;
|
||||
__le16 tx_pkt_len;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_SNIFF_SUBRATE 0x2e
|
||||
struct hci_ev_sniff_subrate {
|
||||
@@ -812,7 +815,7 @@ struct hci_ev_sniff_subrate {
|
||||
__le16 max_rx_latency;
|
||||
__le16 max_remote_timeout;
|
||||
__le16 max_local_timeout;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_EXTENDED_INQUIRY_RESULT 0x2f
|
||||
struct extended_inquiry_info {
|
||||
@@ -823,37 +826,37 @@ struct extended_inquiry_info {
|
||||
__le16 clock_offset;
|
||||
__s8 rssi;
|
||||
__u8 data[240];
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_IO_CAPA_REQUEST 0x31
|
||||
struct hci_ev_io_capa_request {
|
||||
bdaddr_t bdaddr;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_SIMPLE_PAIR_COMPLETE 0x36
|
||||
struct hci_ev_simple_pair_complete {
|
||||
__u8 status;
|
||||
bdaddr_t bdaddr;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_REMOTE_HOST_FEATURES 0x3d
|
||||
struct hci_ev_remote_host_features {
|
||||
bdaddr_t bdaddr;
|
||||
__u8 features[8];
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
/* Internal events generated by Bluetooth stack */
|
||||
#define HCI_EV_STACK_INTERNAL 0xfd
|
||||
struct hci_ev_stack_internal {
|
||||
__u16 type;
|
||||
__u8 data[0];
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_SI_DEVICE 0x01
|
||||
struct hci_ev_si_device {
|
||||
__u16 event;
|
||||
__u16 dev_id;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define HCI_EV_SI_SECURITY 0x02
|
||||
struct hci_ev_si_security {
|
||||
@@ -861,7 +864,7 @@ struct hci_ev_si_security {
|
||||
__u16 proto;
|
||||
__u16 subproto;
|
||||
__u8 incoming;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
/* ---- HCI Packet structures ---- */
|
||||
#define HCI_COMMAND_HDR_SIZE 3
|
||||
@@ -872,22 +875,22 @@ struct hci_ev_si_security {
|
||||
struct hci_command_hdr {
|
||||
__le16 opcode; /* OCF & OGF */
|
||||
__u8 plen;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
struct hci_event_hdr {
|
||||
__u8 evt;
|
||||
__u8 plen;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
struct hci_acl_hdr {
|
||||
__le16 handle; /* Handle & Flags(PB, BC) */
|
||||
__le16 dlen;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
struct hci_sco_hdr {
|
||||
__le16 handle;
|
||||
__u8 dlen;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/skbuff.h>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
/*
|
||||
BlueZ - Bluetooth protocol stack for Linux
|
||||
Copyright (C) 2000-2001 Qualcomm Incorporated
|
||||
Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
|
||||
|
||||
Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
|
||||
|
||||
@@ -12,13 +12,13 @@
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
|
||||
IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
|
||||
CLAIM, OR ANY SPECIAL 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
|
||||
CLAIM, OR ANY SPECIAL 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.
|
||||
|
||||
ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
|
||||
COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
|
||||
ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
|
||||
COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
|
||||
SOFTWARE IS DISCLAIMED.
|
||||
*/
|
||||
|
||||
@@ -62,6 +62,11 @@ struct hci_conn_hash {
|
||||
unsigned int sco_num;
|
||||
};
|
||||
|
||||
struct bdaddr_list {
|
||||
struct list_head list;
|
||||
bdaddr_t bdaddr;
|
||||
};
|
||||
#define NUM_REASSEMBLY 4
|
||||
struct hci_dev {
|
||||
struct list_head list;
|
||||
spinlock_t lock;
|
||||
@@ -118,7 +123,7 @@ struct hci_dev {
|
||||
struct sk_buff_head cmd_q;
|
||||
|
||||
struct sk_buff *sent_cmd;
|
||||
struct sk_buff *reassembly[3];
|
||||
struct sk_buff *reassembly[NUM_REASSEMBLY];
|
||||
|
||||
struct mutex req_lock;
|
||||
wait_queue_head_t req_wait_q;
|
||||
@@ -127,6 +132,7 @@ struct hci_dev {
|
||||
|
||||
struct inquiry_cache inq_cache;
|
||||
struct hci_conn_hash conn_hash;
|
||||
struct bdaddr_list blacklist;
|
||||
|
||||
struct hci_dev_stats stat;
|
||||
|
||||
@@ -250,6 +256,7 @@ enum {
|
||||
HCI_CONN_ENCRYPT_PEND,
|
||||
HCI_CONN_RSWITCH_PEND,
|
||||
HCI_CONN_MODE_CHANGE_PEND,
|
||||
HCI_CONN_SCO_SETUP_PEND,
|
||||
};
|
||||
|
||||
static inline void hci_conn_hash_init(struct hci_dev *hdev)
|
||||
@@ -330,6 +337,7 @@ void hci_acl_connect(struct hci_conn *conn);
|
||||
void hci_acl_disconn(struct hci_conn *conn, __u8 reason);
|
||||
void hci_add_sco(struct hci_conn *conn, __u16 handle);
|
||||
void hci_setup_sync(struct hci_conn *conn, __u16 handle);
|
||||
void hci_sco_setup(struct hci_conn *conn, __u8 status);
|
||||
|
||||
struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst);
|
||||
int hci_conn_del(struct hci_conn *conn);
|
||||
@@ -380,7 +388,7 @@ static inline void __hci_dev_put(struct hci_dev *d)
|
||||
}
|
||||
|
||||
static inline void hci_dev_put(struct hci_dev *d)
|
||||
{
|
||||
{
|
||||
__hci_dev_put(d);
|
||||
module_put(d->owner);
|
||||
}
|
||||
@@ -424,10 +432,14 @@ int hci_get_conn_info(struct hci_dev *hdev, void __user *arg);
|
||||
int hci_get_auth_info(struct hci_dev *hdev, void __user *arg);
|
||||
int hci_inquiry(void __user *arg);
|
||||
|
||||
struct bdaddr_list *hci_blacklist_lookup(struct hci_dev *hdev, bdaddr_t *bdaddr);
|
||||
int hci_blacklist_clear(struct hci_dev *hdev);
|
||||
|
||||
void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb);
|
||||
|
||||
int hci_recv_frame(struct sk_buff *skb);
|
||||
int hci_recv_fragment(struct hci_dev *hdev, int type, void *data, int count);
|
||||
int hci_recv_stream_fragment(struct hci_dev *hdev, void *data, int count);
|
||||
|
||||
int hci_register_sysfs(struct hci_dev *hdev);
|
||||
void hci_unregister_sysfs(struct hci_dev *hdev);
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
/*
|
||||
BlueZ - Bluetooth protocol stack for Linux
|
||||
Copyright (C) 2000-2001 Qualcomm Incorporated
|
||||
Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org>
|
||||
Copyright (C) 2010 Google Inc.
|
||||
|
||||
Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
|
||||
|
||||
@@ -129,31 +131,31 @@ struct l2cap_conninfo {
|
||||
struct l2cap_hdr {
|
||||
__le16 len;
|
||||
__le16 cid;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
#define L2CAP_HDR_SIZE 4
|
||||
|
||||
struct l2cap_cmd_hdr {
|
||||
__u8 code;
|
||||
__u8 ident;
|
||||
__le16 len;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
#define L2CAP_CMD_HDR_SIZE 4
|
||||
|
||||
struct l2cap_cmd_rej {
|
||||
__le16 reason;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
struct l2cap_conn_req {
|
||||
__le16 psm;
|
||||
__le16 scid;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
struct l2cap_conn_rsp {
|
||||
__le16 dcid;
|
||||
__le16 scid;
|
||||
__le16 result;
|
||||
__le16 status;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
/* channel indentifier */
|
||||
#define L2CAP_CID_SIGNALING 0x0001
|
||||
@@ -177,14 +179,14 @@ struct l2cap_conf_req {
|
||||
__le16 dcid;
|
||||
__le16 flags;
|
||||
__u8 data[0];
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
struct l2cap_conf_rsp {
|
||||
__le16 scid;
|
||||
__le16 flags;
|
||||
__le16 result;
|
||||
__u8 data[0];
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define L2CAP_CONF_SUCCESS 0x0000
|
||||
#define L2CAP_CONF_UNACCEPT 0x0001
|
||||
@@ -195,7 +197,7 @@ struct l2cap_conf_opt {
|
||||
__u8 type;
|
||||
__u8 len;
|
||||
__u8 val[0];
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
#define L2CAP_CONF_OPT_SIZE 2
|
||||
|
||||
#define L2CAP_CONF_HINT 0x80
|
||||
@@ -216,7 +218,7 @@ struct l2cap_conf_rfc {
|
||||
__le16 retrans_timeout;
|
||||
__le16 monitor_timeout;
|
||||
__le16 max_pdu_size;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#define L2CAP_MODE_BASIC 0x00
|
||||
#define L2CAP_MODE_RETRANS 0x01
|
||||
@@ -227,22 +229,22 @@ struct l2cap_conf_rfc {
|
||||
struct l2cap_disconn_req {
|
||||
__le16 dcid;
|
||||
__le16 scid;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
struct l2cap_disconn_rsp {
|
||||
__le16 dcid;
|
||||
__le16 scid;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
struct l2cap_info_req {
|
||||
__le16 type;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
struct l2cap_info_rsp {
|
||||
__le16 type;
|
||||
__le16 result;
|
||||
__u8 data[0];
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
/* info type */
|
||||
#define L2CAP_IT_CL_MTU 0x0001
|
||||
@@ -287,6 +289,11 @@ struct l2cap_conn {
|
||||
struct l2cap_chan_list chan_list;
|
||||
};
|
||||
|
||||
struct sock_del_list {
|
||||
struct sock *sk;
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
#define L2CAP_INFO_CL_MTU_REQ_SENT 0x01
|
||||
#define L2CAP_INFO_FEAT_MASK_REQ_SENT 0x04
|
||||
#define L2CAP_INFO_FEAT_MASK_REQ_DONE 0x08
|
||||
@@ -353,7 +360,6 @@ struct l2cap_pinfo {
|
||||
|
||||
__le16 sport;
|
||||
|
||||
spinlock_t send_lock;
|
||||
struct timer_list retrans_timer;
|
||||
struct timer_list monitor_timer;
|
||||
struct timer_list ack_timer;
|
||||
|
||||
@@ -106,19 +106,19 @@ struct rfcomm_hdr {
|
||||
u8 addr;
|
||||
u8 ctrl;
|
||||
u8 len; // Actual size can be 2 bytes
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
struct rfcomm_cmd {
|
||||
u8 addr;
|
||||
u8 ctrl;
|
||||
u8 len;
|
||||
u8 fcs;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
struct rfcomm_mcc {
|
||||
u8 type;
|
||||
u8 len;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
struct rfcomm_pn {
|
||||
u8 dlci;
|
||||
@@ -128,7 +128,7 @@ struct rfcomm_pn {
|
||||
__le16 mtu;
|
||||
u8 max_retrans;
|
||||
u8 credits;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
struct rfcomm_rpn {
|
||||
u8 dlci;
|
||||
@@ -138,17 +138,17 @@ struct rfcomm_rpn {
|
||||
u8 xon_char;
|
||||
u8 xoff_char;
|
||||
__le16 param_mask;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
struct rfcomm_rls {
|
||||
u8 dlci;
|
||||
u8 status;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
struct rfcomm_msc {
|
||||
u8 dlci;
|
||||
u8 v24_sig;
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
/* ---- Core structures, flags etc ---- */
|
||||
|
||||
|
||||
@@ -50,6 +50,9 @@ struct caif_connect_request {
|
||||
* @client_layer: User implementation of client layer. This layer
|
||||
* MUST have receive and control callback functions
|
||||
* implemented.
|
||||
* @ifindex: Link layer interface index used for this connection.
|
||||
* @headroom: Head room needed by CAIF protocol.
|
||||
* @tailroom: Tail room needed by CAIF protocol.
|
||||
*
|
||||
* This function connects a CAIF channel. The Client must implement
|
||||
* the struct cflayer. This layer represents the Client layer and holds
|
||||
@@ -59,8 +62,9 @@ struct caif_connect_request {
|
||||
* E.g. CAIF Socket will call this function for each socket it connects
|
||||
* and have one client_layer instance for each socket.
|
||||
*/
|
||||
int caif_connect_client(struct caif_connect_request *config,
|
||||
struct cflayer *client_layer);
|
||||
int caif_connect_client(struct caif_connect_request *conn_req,
|
||||
struct cflayer *client_layer, int *ifindex,
|
||||
int *headroom, int *tailroom);
|
||||
|
||||
/**
|
||||
* caif_disconnect_client - Disconnects a client from the CAIF stack.
|
||||
|
||||
@@ -15,14 +15,8 @@ struct cfpktq;
|
||||
struct caif_payload_info;
|
||||
struct caif_packet_funcs;
|
||||
|
||||
#define CAIF_MAX_FRAMESIZE 4096
|
||||
#define CAIF_MAX_PAYLOAD_SIZE (4096 - 64)
|
||||
#define CAIF_NEEDED_HEADROOM (10)
|
||||
#define CAIF_NEEDED_TAILROOM (2)
|
||||
|
||||
#define CAIF_LAYER_NAME_SZ 16
|
||||
#define CAIF_SUCCESS 1
|
||||
#define CAIF_FAILURE 0
|
||||
|
||||
/**
|
||||
* caif_assert() - Assert function for CAIF.
|
||||
|
||||
@@ -0,0 +1,153 @@
|
||||
/*
|
||||
* Copyright (C) ST-Ericsson AB 2010
|
||||
* Author: Daniel Martensson / Daniel.Martensson@stericsson.com
|
||||
* License terms: GNU General Public License (GPL) version 2
|
||||
*/
|
||||
|
||||
#ifndef CAIF_SPI_H_
|
||||
#define CAIF_SPI_H_
|
||||
|
||||
#include <net/caif/caif_device.h>
|
||||
|
||||
#define SPI_CMD_WR 0x00
|
||||
#define SPI_CMD_RD 0x01
|
||||
#define SPI_CMD_EOT 0x02
|
||||
#define SPI_CMD_IND 0x04
|
||||
|
||||
#define SPI_DMA_BUF_LEN 8192
|
||||
|
||||
#define WL_SZ 2 /* 16 bits. */
|
||||
#define SPI_CMD_SZ 4 /* 32 bits. */
|
||||
#define SPI_IND_SZ 4 /* 32 bits. */
|
||||
|
||||
#define SPI_XFER 0
|
||||
#define SPI_SS_ON 1
|
||||
#define SPI_SS_OFF 2
|
||||
#define SPI_TERMINATE 3
|
||||
|
||||
/* Minimum time between different levels is 50 microseconds. */
|
||||
#define MIN_TRANSITION_TIME_USEC 50
|
||||
|
||||
/* Defines for calculating duration of SPI transfers for a particular
|
||||
* number of bytes.
|
||||
*/
|
||||
#define SPI_MASTER_CLK_MHZ 13
|
||||
#define SPI_XFER_TIME_USEC(bytes, clk) (((bytes) * 8) / clk)
|
||||
|
||||
/* Normally this should be aligned on the modem in order to benefit from full
|
||||
* duplex transfers. However a size of 8188 provokes errors when running with
|
||||
* the modem. These errors occur when packet sizes approaches 4 kB of data.
|
||||
*/
|
||||
#define CAIF_MAX_SPI_FRAME 4092
|
||||
|
||||
/* Maximum number of uplink CAIF frames that can reside in the same SPI frame.
|
||||
* This number should correspond with the modem setting. The application side
|
||||
* CAIF accepts any number of embedded downlink CAIF frames.
|
||||
*/
|
||||
#define CAIF_MAX_SPI_PKTS 9
|
||||
|
||||
/* Decides if SPI buffers should be prefilled with 0xFF pattern for easier
|
||||
* debugging. Both TX and RX buffers will be filled before the transfer.
|
||||
*/
|
||||
#define CFSPI_DBG_PREFILL 0
|
||||
|
||||
/* Structure describing a SPI transfer. */
|
||||
struct cfspi_xfer {
|
||||
u16 tx_dma_len;
|
||||
u16 rx_dma_len;
|
||||
void *va_tx;
|
||||
dma_addr_t pa_tx;
|
||||
void *va_rx;
|
||||
dma_addr_t pa_rx;
|
||||
};
|
||||
|
||||
/* Structure implemented by the SPI interface. */
|
||||
struct cfspi_ifc {
|
||||
void (*ss_cb) (bool assert, struct cfspi_ifc *ifc);
|
||||
void (*xfer_done_cb) (struct cfspi_ifc *ifc);
|
||||
void *priv;
|
||||
};
|
||||
|
||||
/* Structure implemented by SPI clients. */
|
||||
struct cfspi_dev {
|
||||
int (*init_xfer) (struct cfspi_xfer *xfer, struct cfspi_dev *dev);
|
||||
void (*sig_xfer) (bool xfer, struct cfspi_dev *dev);
|
||||
struct cfspi_ifc *ifc;
|
||||
char *name;
|
||||
u32 clk_mhz;
|
||||
void *priv;
|
||||
};
|
||||
|
||||
/* Enumeration describing the CAIF SPI state. */
|
||||
enum cfspi_state {
|
||||
CFSPI_STATE_WAITING = 0,
|
||||
CFSPI_STATE_AWAKE,
|
||||
CFSPI_STATE_FETCH_PKT,
|
||||
CFSPI_STATE_GET_NEXT,
|
||||
CFSPI_STATE_INIT_XFER,
|
||||
CFSPI_STATE_WAIT_ACTIVE,
|
||||
CFSPI_STATE_SIG_ACTIVE,
|
||||
CFSPI_STATE_WAIT_XFER_DONE,
|
||||
CFSPI_STATE_XFER_DONE,
|
||||
CFSPI_STATE_WAIT_INACTIVE,
|
||||
CFSPI_STATE_SIG_INACTIVE,
|
||||
CFSPI_STATE_DELIVER_PKT,
|
||||
CFSPI_STATE_MAX,
|
||||
};
|
||||
|
||||
/* Structure implemented by SPI physical interfaces. */
|
||||
struct cfspi {
|
||||
struct caif_dev_common cfdev;
|
||||
struct net_device *ndev;
|
||||
struct platform_device *pdev;
|
||||
struct sk_buff_head qhead;
|
||||
struct sk_buff_head chead;
|
||||
u16 cmd;
|
||||
u16 tx_cpck_len;
|
||||
u16 tx_npck_len;
|
||||
u16 rx_cpck_len;
|
||||
u16 rx_npck_len;
|
||||
struct cfspi_ifc ifc;
|
||||
struct cfspi_xfer xfer;
|
||||
struct cfspi_dev *dev;
|
||||
unsigned long state;
|
||||
struct work_struct work;
|
||||
struct workqueue_struct *wq;
|
||||
struct list_head list;
|
||||
int flow_off_sent;
|
||||
u32 qd_low_mark;
|
||||
u32 qd_high_mark;
|
||||
struct completion comp;
|
||||
wait_queue_head_t wait;
|
||||
spinlock_t lock;
|
||||
bool flow_stop;
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
enum cfspi_state dbg_state;
|
||||
u16 pcmd;
|
||||
u16 tx_ppck_len;
|
||||
u16 rx_ppck_len;
|
||||
struct dentry *dbgfs_dir;
|
||||
struct dentry *dbgfs_state;
|
||||
struct dentry *dbgfs_frame;
|
||||
#endif /* CONFIG_DEBUG_FS */
|
||||
};
|
||||
|
||||
extern int spi_frm_align;
|
||||
extern int spi_up_head_align;
|
||||
extern int spi_up_tail_align;
|
||||
extern int spi_down_head_align;
|
||||
extern int spi_down_tail_align;
|
||||
extern struct platform_driver cfspi_spi_driver;
|
||||
|
||||
void cfspi_dbg_state(struct cfspi *cfspi, int state);
|
||||
int cfspi_xmitfrm(struct cfspi *cfspi, u8 *buf, size_t len);
|
||||
int cfspi_xmitlen(struct cfspi *cfspi);
|
||||
int cfspi_rxfrm(struct cfspi *cfspi, u8 *buf, size_t len);
|
||||
int cfspi_spi_remove(struct platform_device *pdev);
|
||||
int cfspi_spi_probe(struct platform_device *pdev);
|
||||
int cfspi_xmitfrm(struct cfspi *cfspi, u8 *buf, size_t len);
|
||||
int cfspi_xmitlen(struct cfspi *cfspi);
|
||||
int cfspi_rxfrm(struct cfspi *cfspi, u8 *buf, size_t len);
|
||||
void cfspi_xfer(struct work_struct *work);
|
||||
|
||||
#endif /* CAIF_SPI_H_ */
|
||||
@@ -7,6 +7,7 @@
|
||||
#ifndef CFCNFG_H_
|
||||
#define CFCNFG_H_
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <net/caif/caif_layer.h>
|
||||
#include <net/caif/cfctrl.h>
|
||||
|
||||
@@ -73,8 +74,8 @@ void cfcnfg_remove(struct cfcnfg *cfg);
|
||||
|
||||
void
|
||||
cfcnfg_add_phy_layer(struct cfcnfg *cnfg, enum cfcnfg_phy_type phy_type,
|
||||
void *dev, struct cflayer *phy_layer, u16 *phyid,
|
||||
enum cfcnfg_phy_preference pref,
|
||||
struct net_device *dev, struct cflayer *phy_layer,
|
||||
u16 *phyid, enum cfcnfg_phy_preference pref,
|
||||
bool fcs, bool stx);
|
||||
|
||||
/**
|
||||
@@ -114,11 +115,18 @@ void cfcnfg_release_adap_layer(struct cflayer *adap_layer);
|
||||
* @param: Link setup parameters.
|
||||
* @adap_layer: Specify the adaptation layer; the receive and
|
||||
* flow-control functions MUST be set in the structure.
|
||||
*
|
||||
* @ifindex: Link layer interface index used for this connection.
|
||||
* @proto_head: Protocol head-space needed by CAIF protocol,
|
||||
* excluding link layer.
|
||||
* @proto_tail: Protocol tail-space needed by CAIF protocol,
|
||||
* excluding link layer.
|
||||
*/
|
||||
int cfcnfg_add_adaptation_layer(struct cfcnfg *cnfg,
|
||||
struct cfctrl_link_param *param,
|
||||
struct cflayer *adap_layer);
|
||||
struct cflayer *adap_layer,
|
||||
int *ifindex,
|
||||
int *proto_head,
|
||||
int *proto_tail);
|
||||
|
||||
/**
|
||||
* cfcnfg_get_phyid() - Get physical ID, given type.
|
||||
|
||||
@@ -16,6 +16,8 @@ struct cfsrvl {
|
||||
bool open;
|
||||
bool phy_flow_on;
|
||||
bool modem_flow_on;
|
||||
bool supports_flowctrl;
|
||||
void (*release)(struct kref *);
|
||||
struct dev_info dev_info;
|
||||
struct kref ref;
|
||||
};
|
||||
@@ -25,13 +27,15 @@ struct cflayer *cfvei_create(u8 linkid, struct dev_info *dev_info);
|
||||
struct cflayer *cfdgml_create(u8 linkid, struct dev_info *dev_info);
|
||||
struct cflayer *cfutill_create(u8 linkid, struct dev_info *dev_info);
|
||||
struct cflayer *cfvidl_create(u8 linkid, struct dev_info *dev_info);
|
||||
struct cflayer *cfrfml_create(u8 linkid, struct dev_info *dev_info);
|
||||
struct cflayer *cfrfml_create(u8 linkid, struct dev_info *dev_info,
|
||||
int mtu_size);
|
||||
struct cflayer *cfdbgl_create(u8 linkid, struct dev_info *dev_info);
|
||||
bool cfsrvl_phyid_match(struct cflayer *layer, int phyid);
|
||||
void cfservl_destroy(struct cflayer *layer);
|
||||
void cfsrvl_init(struct cfsrvl *service,
|
||||
u8 channel_id,
|
||||
struct dev_info *dev_info);
|
||||
u8 channel_id,
|
||||
struct dev_info *dev_info,
|
||||
bool supports_flowctrl);
|
||||
bool cfsrvl_ready(struct cfsrvl *service, int *err);
|
||||
u8 cfsrvl_getphyid(struct cflayer *layer);
|
||||
|
||||
@@ -50,7 +54,10 @@ static inline void cfsrvl_put(struct cflayer *layr)
|
||||
if (layr == NULL)
|
||||
return;
|
||||
s = container_of(layr, struct cfsrvl, layer);
|
||||
kref_put(&s->ref, cfsrvl_release);
|
||||
|
||||
WARN_ON(!s->release);
|
||||
if (s->release)
|
||||
kref_put(&s->ref, s->release);
|
||||
}
|
||||
|
||||
#endif /* CFSRVL_H_ */
|
||||
|
||||
+163
-58
@@ -37,6 +37,7 @@
|
||||
*
|
||||
* @IEEE80211_BAND_2GHZ: 2.4GHz ISM band
|
||||
* @IEEE80211_BAND_5GHZ: around 5GHz band (4.9-5.7)
|
||||
* @IEEE80211_NUM_BANDS: number of defined bands
|
||||
*/
|
||||
enum ieee80211_band {
|
||||
IEEE80211_BAND_2GHZ = NL80211_BAND_2GHZ,
|
||||
@@ -89,7 +90,7 @@ enum ieee80211_channel_flags {
|
||||
* @max_power: maximum transmission power (in dBm)
|
||||
* @beacon_found: helper to regulatory code to indicate when a beacon
|
||||
* has been found on this channel. Use regulatory_hint_found_beacon()
|
||||
* to enable this, this is is useful only on 5 GHz band.
|
||||
* to enable this, this is useful only on 5 GHz band.
|
||||
* @orig_mag: internal use
|
||||
* @orig_mpwr: internal use
|
||||
*/
|
||||
@@ -188,6 +189,7 @@ struct ieee80211_sta_ht_cap {
|
||||
* in this band. Must be sorted to give a valid "supported
|
||||
* rates" IE, i.e. CCK rates first, then OFDM.
|
||||
* @n_bitrates: Number of bitrates in @bitrates
|
||||
* @ht_cap: HT capabilities in this band
|
||||
*/
|
||||
struct ieee80211_supported_band {
|
||||
struct ieee80211_channel *channels;
|
||||
@@ -225,6 +227,7 @@ struct vif_params {
|
||||
* @seq: sequence counter (IV/PN) for TKIP and CCMP keys, only used
|
||||
* with the get_key() callback, must be in little endian,
|
||||
* length given by @seq_len.
|
||||
* @seq_len: length of @seq.
|
||||
*/
|
||||
struct key_params {
|
||||
u8 *key;
|
||||
@@ -237,6 +240,8 @@ struct key_params {
|
||||
/**
|
||||
* enum survey_info_flags - survey information flags
|
||||
*
|
||||
* @SURVEY_INFO_NOISE_DBM: noise (in dBm) was filled in
|
||||
*
|
||||
* Used by the driver to indicate which info in &struct survey_info
|
||||
* it has filled in during the get_survey().
|
||||
*/
|
||||
@@ -247,13 +252,13 @@ enum survey_info_flags {
|
||||
/**
|
||||
* struct survey_info - channel survey response
|
||||
*
|
||||
* Used by dump_survey() to report back per-channel survey information.
|
||||
*
|
||||
* @channel: the channel this survey record reports, mandatory
|
||||
* @filled: bitflag of flags from &enum survey_info_flags
|
||||
* @noise: channel noise in dBm. This and all following fields are
|
||||
* optional
|
||||
*
|
||||
* Used by dump_survey() to report back per-channel survey information.
|
||||
*
|
||||
* This structure can later be expanded with things like
|
||||
* channel duty cycle etc.
|
||||
*/
|
||||
@@ -288,7 +293,7 @@ struct beacon_parameters {
|
||||
*
|
||||
* @PLINK_ACTION_INVALID: action 0 is reserved
|
||||
* @PLINK_ACTION_OPEN: start mesh peer link establishment
|
||||
* @PLINK_ACTION_BLOCL: block traffic from this mesh peer
|
||||
* @PLINK_ACTION_BLOCK: block traffic from this mesh peer
|
||||
*/
|
||||
enum plink_actions {
|
||||
PLINK_ACTION_INVALID,
|
||||
@@ -311,6 +316,8 @@ enum plink_actions {
|
||||
* (bitmask of BIT(NL80211_STA_FLAG_...))
|
||||
* @listen_interval: listen interval or -1 for no change
|
||||
* @aid: AID or zero for no change
|
||||
* @plink_action: plink action to take
|
||||
* @ht_capa: HT capabilities of station
|
||||
*/
|
||||
struct station_parameters {
|
||||
u8 *supported_rates;
|
||||
@@ -448,13 +455,13 @@ enum monitor_flags {
|
||||
* Used by the driver to indicate which info in &struct mpath_info it has filled
|
||||
* in during get_station() or dump_station().
|
||||
*
|
||||
* MPATH_INFO_FRAME_QLEN: @frame_qlen filled
|
||||
* MPATH_INFO_SN: @sn filled
|
||||
* MPATH_INFO_METRIC: @metric filled
|
||||
* MPATH_INFO_EXPTIME: @exptime filled
|
||||
* MPATH_INFO_DISCOVERY_TIMEOUT: @discovery_timeout filled
|
||||
* MPATH_INFO_DISCOVERY_RETRIES: @discovery_retries filled
|
||||
* MPATH_INFO_FLAGS: @flags filled
|
||||
* @MPATH_INFO_FRAME_QLEN: @frame_qlen filled
|
||||
* @MPATH_INFO_SN: @sn filled
|
||||
* @MPATH_INFO_METRIC: @metric filled
|
||||
* @MPATH_INFO_EXPTIME: @exptime filled
|
||||
* @MPATH_INFO_DISCOVERY_TIMEOUT: @discovery_timeout filled
|
||||
* @MPATH_INFO_DISCOVERY_RETRIES: @discovery_retries filled
|
||||
* @MPATH_INFO_FLAGS: @flags filled
|
||||
*/
|
||||
enum mpath_info_flags {
|
||||
MPATH_INFO_FRAME_QLEN = BIT(0),
|
||||
@@ -587,6 +594,7 @@ struct cfg80211_ssid {
|
||||
* @ie_len: length of ie in octets
|
||||
* @wiphy: the wiphy this was for
|
||||
* @dev: the interface
|
||||
* @aborted: (internal) scan request was notified as aborted
|
||||
*/
|
||||
struct cfg80211_scan_request {
|
||||
struct cfg80211_ssid *ssids;
|
||||
@@ -623,6 +631,7 @@ enum cfg80211_signal_type {
|
||||
* This structure describes a BSS (which may also be a mesh network)
|
||||
* for use in scan results and similar.
|
||||
*
|
||||
* @channel: channel this BSS is on
|
||||
* @bssid: BSSID of the BSS
|
||||
* @tsf: timestamp of last received update
|
||||
* @beacon_interval: the beacon interval as from the frame
|
||||
@@ -801,6 +810,7 @@ struct cfg80211_disassoc_request {
|
||||
* @beacon_interval: beacon interval to use
|
||||
* @privacy: this is a protected network, keys will be configured
|
||||
* after joining
|
||||
* @basic_rates: bitmap of basic rates to use when creating the IBSS
|
||||
*/
|
||||
struct cfg80211_ibss_params {
|
||||
u8 *ssid;
|
||||
@@ -809,6 +819,7 @@ struct cfg80211_ibss_params {
|
||||
u8 *ie;
|
||||
u8 ssid_len, ie_len;
|
||||
u16 beacon_interval;
|
||||
u32 basic_rates;
|
||||
bool channel_fixed;
|
||||
bool privacy;
|
||||
};
|
||||
@@ -826,8 +837,8 @@ struct cfg80211_ibss_params {
|
||||
* @ssid: SSID
|
||||
* @ssid_len: Length of ssid in octets
|
||||
* @auth_type: Authentication type (algorithm)
|
||||
* @assoc_ie: IEs for association request
|
||||
* @assoc_ie_len: Length of assoc_ie in octets
|
||||
* @ie: IEs for association request
|
||||
* @ie_len: Length of assoc_ie in octets
|
||||
* @privacy: indicates whether privacy-enabled APs should be used
|
||||
* @crypto: crypto settings
|
||||
* @key_len: length of WEP key for shared key authentication
|
||||
@@ -850,10 +861,11 @@ struct cfg80211_connect_params {
|
||||
|
||||
/**
|
||||
* enum wiphy_params_flags - set_wiphy_params bitfield values
|
||||
* WIPHY_PARAM_RETRY_SHORT: wiphy->retry_short has changed
|
||||
* WIPHY_PARAM_RETRY_LONG: wiphy->retry_long has changed
|
||||
* WIPHY_PARAM_FRAG_THRESHOLD: wiphy->frag_threshold has changed
|
||||
* WIPHY_PARAM_RTS_THRESHOLD: wiphy->rts_threshold has changed
|
||||
* @WIPHY_PARAM_RETRY_SHORT: wiphy->retry_short has changed
|
||||
* @WIPHY_PARAM_RETRY_LONG: wiphy->retry_long has changed
|
||||
* @WIPHY_PARAM_FRAG_THRESHOLD: wiphy->frag_threshold has changed
|
||||
* @WIPHY_PARAM_RTS_THRESHOLD: wiphy->rts_threshold has changed
|
||||
* @WIPHY_PARAM_COVERAGE_CLASS: coverage class changed
|
||||
*/
|
||||
enum wiphy_params_flags {
|
||||
WIPHY_PARAM_RETRY_SHORT = 1 << 0,
|
||||
@@ -863,19 +875,6 @@ enum wiphy_params_flags {
|
||||
WIPHY_PARAM_COVERAGE_CLASS = 1 << 4,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum tx_power_setting - TX power adjustment
|
||||
*
|
||||
* @TX_POWER_AUTOMATIC: the dbm parameter is ignored
|
||||
* @TX_POWER_LIMITED: limit TX power by the dbm parameter
|
||||
* @TX_POWER_FIXED: fix TX power to the dbm parameter
|
||||
*/
|
||||
enum tx_power_setting {
|
||||
TX_POWER_AUTOMATIC,
|
||||
TX_POWER_LIMITED,
|
||||
TX_POWER_FIXED,
|
||||
};
|
||||
|
||||
/*
|
||||
* cfg80211_bitrate_mask - masks for bitrate control
|
||||
*/
|
||||
@@ -949,10 +948,16 @@ struct cfg80211_pmksa {
|
||||
* @del_beacon: Remove beacon configuration and stop sending the beacon.
|
||||
*
|
||||
* @add_station: Add a new station.
|
||||
*
|
||||
* @del_station: Remove a station; @mac may be NULL to remove all stations.
|
||||
*
|
||||
* @change_station: Modify a given station.
|
||||
* @get_station: get station information for the station identified by @mac
|
||||
* @dump_station: dump station callback -- resume dump at index @idx
|
||||
*
|
||||
* @add_mpath: add a fixed mesh path
|
||||
* @del_mpath: delete a given mesh path
|
||||
* @change_mpath: change a given mesh path
|
||||
* @get_mpath: get a mesh path for the given parameters
|
||||
* @dump_mpath: dump mesh path callback -- resume dump at index @idx
|
||||
*
|
||||
* @get_mesh_params: Put the current mesh parameters into *params
|
||||
*
|
||||
@@ -960,8 +965,6 @@ struct cfg80211_pmksa {
|
||||
* The mask is a bitfield which tells us which parameters to
|
||||
* set, and which to leave alone.
|
||||
*
|
||||
* @set_mesh_cfg: set mesh parameters (by now, just mesh id)
|
||||
*
|
||||
* @change_bss: Modify parameters for a given BSS.
|
||||
*
|
||||
* @set_txq_params: Set TX queue parameters
|
||||
@@ -1002,6 +1005,8 @@ struct cfg80211_pmksa {
|
||||
* @get_tx_power: store the current TX power into the dbm variable;
|
||||
* return 0 if successful
|
||||
*
|
||||
* @set_wds_peer: set the WDS peer for a WDS interface
|
||||
*
|
||||
* @rfkill_poll: polls the hw rfkill line, use cfg80211 reporting
|
||||
* functions to adjust rfkill hw state
|
||||
*
|
||||
@@ -1019,6 +1024,8 @@ struct cfg80211_pmksa {
|
||||
*
|
||||
* @testmode_cmd: run a test mode command
|
||||
*
|
||||
* @set_bitrate_mask: set the bitrate mask configuration
|
||||
*
|
||||
* @set_pmksa: Cache a PMKID for a BSSID. This is mostly useful for fullmac
|
||||
* devices running firmwares capable of generating the (re) association
|
||||
* RSN IE. It allows for faster roaming between WPA2 BSSIDs.
|
||||
@@ -1129,7 +1136,7 @@ struct cfg80211_ops {
|
||||
int (*set_wiphy_params)(struct wiphy *wiphy, u32 changed);
|
||||
|
||||
int (*set_tx_power)(struct wiphy *wiphy,
|
||||
enum tx_power_setting type, int dbm);
|
||||
enum nl80211_tx_power_setting type, int mbm);
|
||||
int (*get_tx_power)(struct wiphy *wiphy, int *dbm);
|
||||
|
||||
int (*set_wds_peer)(struct wiphy *wiphy, struct net_device *dev,
|
||||
@@ -1168,6 +1175,7 @@ struct cfg80211_ops {
|
||||
int (*action)(struct wiphy *wiphy, struct net_device *dev,
|
||||
struct ieee80211_channel *chan,
|
||||
enum nl80211_channel_type channel_type,
|
||||
bool channel_type_valid,
|
||||
const u8 *buf, size_t len, u64 *cookie);
|
||||
|
||||
int (*set_power_mgmt)(struct wiphy *wiphy, struct net_device *dev,
|
||||
@@ -1230,8 +1238,6 @@ struct mac_address {
|
||||
|
||||
/**
|
||||
* struct wiphy - wireless hardware description
|
||||
* @idx: the wiphy index assigned to this item
|
||||
* @class_dev: the class device representing /sys/class/ieee80211/<wiphy-name>
|
||||
* @reg_notifier: the driver's regulatory notification callback
|
||||
* @regd: the driver's regulatory domain, if one was requested via
|
||||
* the regulatory_hint() API. This can be used by the driver
|
||||
@@ -1245,7 +1251,7 @@ struct mac_address {
|
||||
* @frag_threshold: Fragmentation threshold (dot11FragmentationThreshold);
|
||||
* -1 = fragmentation disabled, only odd values >= 256 used
|
||||
* @rts_threshold: RTS threshold (dot11RTSThreshold); -1 = RTS/CTS disabled
|
||||
* @net: the network namespace this wiphy currently lives in
|
||||
* @_net: the network namespace this wiphy currently lives in
|
||||
* @perm_addr: permanent MAC address of this device
|
||||
* @addr_mask: If the device supports multiple MAC addresses by masking,
|
||||
* set this to a mask with variable bits set to 1, e.g. if the last
|
||||
@@ -1258,6 +1264,28 @@ struct mac_address {
|
||||
* by default for perm_addr. In this case, the mask should be set to
|
||||
* all-zeroes. In this case it is assumed that the device can handle
|
||||
* the same number of arbitrary MAC addresses.
|
||||
* @debugfsdir: debugfs directory used for this wiphy, will be renamed
|
||||
* automatically on wiphy renames
|
||||
* @dev: (virtual) struct device for this wiphy
|
||||
* @wext: wireless extension handlers
|
||||
* @priv: driver private data (sized according to wiphy_new() parameter)
|
||||
* @interface_modes: bitmask of interfaces types valid for this wiphy,
|
||||
* must be set by driver
|
||||
* @flags: wiphy flags, see &enum wiphy_flags
|
||||
* @bss_priv_size: each BSS struct has private data allocated with it,
|
||||
* this variable determines its size
|
||||
* @max_scan_ssids: maximum number of SSIDs the device can scan for in
|
||||
* any given scan
|
||||
* @max_scan_ie_len: maximum length of user-controlled IEs device can
|
||||
* add to probe request frames transmitted during a scan, must not
|
||||
* include fixed IEs like supported rates
|
||||
* @coverage_class: current coverage class
|
||||
* @fw_version: firmware version for ethtool reporting
|
||||
* @hw_version: hardware version for ethtool reporting
|
||||
* @max_num_pmkids: maximum number of PMKIDs supported by device
|
||||
* @privid: a pointer that drivers can use to identify if an arbitrary
|
||||
* wiphy is theirs, e.g. in global notifiers
|
||||
* @bands: information about bands/channels supported by this device
|
||||
*/
|
||||
struct wiphy {
|
||||
/* assign these fields before you register the wiphy */
|
||||
@@ -1330,26 +1358,15 @@ struct wiphy {
|
||||
char priv[0] __attribute__((__aligned__(NETDEV_ALIGN)));
|
||||
};
|
||||
|
||||
#ifdef CONFIG_NET_NS
|
||||
static inline struct net *wiphy_net(struct wiphy *wiphy)
|
||||
{
|
||||
return wiphy->_net;
|
||||
return read_pnet(&wiphy->_net);
|
||||
}
|
||||
|
||||
static inline void wiphy_net_set(struct wiphy *wiphy, struct net *net)
|
||||
{
|
||||
wiphy->_net = net;
|
||||
write_pnet(&wiphy->_net, net);
|
||||
}
|
||||
#else
|
||||
static inline struct net *wiphy_net(struct wiphy *wiphy)
|
||||
{
|
||||
return &init_net;
|
||||
}
|
||||
|
||||
static inline void wiphy_net_set(struct wiphy *wiphy, struct net *net)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* wiphy_priv - return priv from wiphy
|
||||
@@ -1399,7 +1416,7 @@ static inline struct device *wiphy_dev(struct wiphy *wiphy)
|
||||
*
|
||||
* @wiphy: The wiphy whose name to return
|
||||
*/
|
||||
static inline const char *wiphy_name(struct wiphy *wiphy)
|
||||
static inline const char *wiphy_name(const struct wiphy *wiphy)
|
||||
{
|
||||
return dev_name(&wiphy->dev);
|
||||
}
|
||||
@@ -1471,13 +1488,14 @@ struct cfg80211_cached_keys;
|
||||
* @ssid: (private) Used by the internal configuration code
|
||||
* @ssid_len: (private) Used by the internal configuration code
|
||||
* @wext: (private) Used by the internal wireless extensions compat code
|
||||
* @wext_bssid: (private) Used by the internal wireless extensions compat code
|
||||
* @use_4addr: indicates 4addr mode is used on this interface, must be
|
||||
* set by driver (if supported) on add_interface BEFORE registering the
|
||||
* netdev and may otherwise be used by driver read-only, will be update
|
||||
* by cfg80211 on change_interface
|
||||
* @action_registrations: list of registrations for action frames
|
||||
* @action_registrations_lock: lock for the list
|
||||
* @mtx: mutex used to lock data in this struct
|
||||
* @cleanup_work: work struct used for cleanup that can't be done directly
|
||||
*/
|
||||
struct wireless_dev {
|
||||
struct wiphy *wiphy;
|
||||
@@ -1551,11 +1569,13 @@ static inline void *wdev_priv(struct wireless_dev *wdev)
|
||||
|
||||
/**
|
||||
* ieee80211_channel_to_frequency - convert channel number to frequency
|
||||
* @chan: channel number
|
||||
*/
|
||||
extern int ieee80211_channel_to_frequency(int chan);
|
||||
|
||||
/**
|
||||
* ieee80211_frequency_to_channel - convert frequency to channel number
|
||||
* @freq: center frequency
|
||||
*/
|
||||
extern int ieee80211_frequency_to_channel(int freq);
|
||||
|
||||
@@ -1570,6 +1590,8 @@ extern struct ieee80211_channel *__ieee80211_get_channel(struct wiphy *wiphy,
|
||||
int freq);
|
||||
/**
|
||||
* ieee80211_get_channel - get channel struct from wiphy for specified frequency
|
||||
* @wiphy: the struct wiphy to get the channel for
|
||||
* @freq: the center frequency of the channel
|
||||
*/
|
||||
static inline struct ieee80211_channel *
|
||||
ieee80211_get_channel(struct wiphy *wiphy, int freq)
|
||||
@@ -1630,9 +1652,6 @@ struct ieee80211_radiotap_vendor_namespaces {
|
||||
* @is_radiotap_ns: indicates whether the current namespace is the default
|
||||
* radiotap namespace or not
|
||||
*
|
||||
* @overrides: override standard radiotap fields
|
||||
* @n_overrides: number of overrides
|
||||
*
|
||||
* @_rtheader: pointer to the radiotap header we are walking through
|
||||
* @_max_length: length of radiotap header in cpu byte ordering
|
||||
* @_arg_index: next argument index
|
||||
@@ -1933,6 +1952,10 @@ int cfg80211_wext_giwap(struct net_device *dev,
|
||||
struct iw_request_info *info,
|
||||
struct sockaddr *ap_addr, char *extra);
|
||||
|
||||
int cfg80211_wext_siwpmksa(struct net_device *dev,
|
||||
struct iw_request_info *info,
|
||||
struct iw_point *data, char *extra);
|
||||
|
||||
/*
|
||||
* callbacks for asynchronous cfg80211 methods, notification
|
||||
* functions and BSS handling helpers
|
||||
@@ -1948,10 +1971,12 @@ int cfg80211_wext_giwap(struct net_device *dev,
|
||||
void cfg80211_scan_done(struct cfg80211_scan_request *request, bool aborted);
|
||||
|
||||
/**
|
||||
* cfg80211_inform_bss - inform cfg80211 of a new BSS
|
||||
* cfg80211_inform_bss_frame - inform cfg80211 of a received BSS frame
|
||||
*
|
||||
* @wiphy: the wiphy reporting the BSS
|
||||
* @bss: the found BSS
|
||||
* @channel: The channel the frame was received on
|
||||
* @mgmt: the management frame (probe response or beacon)
|
||||
* @len: length of the management frame
|
||||
* @signal: the signal strength, type depends on the wiphy's signal_type
|
||||
* @gfp: context flags
|
||||
*
|
||||
@@ -1964,6 +1989,23 @@ cfg80211_inform_bss_frame(struct wiphy *wiphy,
|
||||
struct ieee80211_mgmt *mgmt, size_t len,
|
||||
s32 signal, gfp_t gfp);
|
||||
|
||||
/**
|
||||
* cfg80211_inform_bss - inform cfg80211 of a new BSS
|
||||
*
|
||||
* @wiphy: the wiphy reporting the BSS
|
||||
* @channel: The channel the frame was received on
|
||||
* @bssid: the BSSID of the BSS
|
||||
* @timestamp: the TSF timestamp sent by the peer
|
||||
* @capability: the capability field sent by the peer
|
||||
* @beacon_interval: the beacon interval announced by the peer
|
||||
* @ie: additional IEs sent by the peer
|
||||
* @ielen: length of the additional IEs
|
||||
* @signal: the signal strength, type depends on the wiphy's signal_type
|
||||
* @gfp: context flags
|
||||
*
|
||||
* This informs cfg80211 that BSS information was found and
|
||||
* the BSS should be updated/added.
|
||||
*/
|
||||
struct cfg80211_bss*
|
||||
cfg80211_inform_bss(struct wiphy *wiphy,
|
||||
struct ieee80211_channel *channel,
|
||||
@@ -2378,4 +2420,67 @@ void cfg80211_cqm_rssi_notify(struct net_device *dev,
|
||||
enum nl80211_cqm_rssi_threshold_event rssi_event,
|
||||
gfp_t gfp);
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
/* Logging, debugging and troubleshooting/diagnostic helpers. */
|
||||
|
||||
/* wiphy_printk helpers, similar to dev_printk */
|
||||
|
||||
#define wiphy_printk(level, wiphy, format, args...) \
|
||||
printk(level "%s: " format, wiphy_name(wiphy), ##args)
|
||||
#define wiphy_emerg(wiphy, format, args...) \
|
||||
wiphy_printk(KERN_EMERG, wiphy, format, ##args)
|
||||
#define wiphy_alert(wiphy, format, args...) \
|
||||
wiphy_printk(KERN_ALERT, wiphy, format, ##args)
|
||||
#define wiphy_crit(wiphy, format, args...) \
|
||||
wiphy_printk(KERN_CRIT, wiphy, format, ##args)
|
||||
#define wiphy_err(wiphy, format, args...) \
|
||||
wiphy_printk(KERN_ERR, wiphy, format, ##args)
|
||||
#define wiphy_warn(wiphy, format, args...) \
|
||||
wiphy_printk(KERN_WARNING, wiphy, format, ##args)
|
||||
#define wiphy_notice(wiphy, format, args...) \
|
||||
wiphy_printk(KERN_NOTICE, wiphy, format, ##args)
|
||||
#define wiphy_info(wiphy, format, args...) \
|
||||
wiphy_printk(KERN_INFO, wiphy, format, ##args)
|
||||
|
||||
int wiphy_debug(const struct wiphy *wiphy, const char *format, ...)
|
||||
__attribute__ ((format (printf, 2, 3)));
|
||||
|
||||
#if defined(DEBUG)
|
||||
#define wiphy_dbg(wiphy, format, args...) \
|
||||
wiphy_printk(KERN_DEBUG, wiphy, format, ##args)
|
||||
#elif defined(CONFIG_DYNAMIC_DEBUG)
|
||||
#define wiphy_dbg(wiphy, format, args...) \
|
||||
dynamic_pr_debug("%s: " format, wiphy_name(wiphy), ##args)
|
||||
#else
|
||||
#define wiphy_dbg(wiphy, format, args...) \
|
||||
({ \
|
||||
if (0) \
|
||||
wiphy_printk(KERN_DEBUG, wiphy, format, ##args); \
|
||||
0; \
|
||||
})
|
||||
#endif
|
||||
|
||||
#if defined(VERBOSE_DEBUG)
|
||||
#define wiphy_vdbg wiphy_dbg
|
||||
#else
|
||||
|
||||
#define wiphy_vdbg(wiphy, format, args...) \
|
||||
({ \
|
||||
if (0) \
|
||||
wiphy_printk(KERN_DEBUG, wiphy, format, ##args); \
|
||||
0; \
|
||||
})
|
||||
#endif
|
||||
|
||||
/*
|
||||
* wiphy_WARN() acts like wiphy_printk(), but with the key difference
|
||||
* of using a WARN/WARN_ON to get the message out, including the
|
||||
* file/line information and a backtrace.
|
||||
*/
|
||||
#define wiphy_WARN(wiphy, format, args...) \
|
||||
WARN(1, "wiphy: %s\n" format, wiphy_name(wiphy), ##args);
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* __NET_CFG80211_H */
|
||||
|
||||
@@ -101,7 +101,7 @@ struct dn_short_packet {
|
||||
__le16 dstnode;
|
||||
__le16 srcnode;
|
||||
__u8 forward;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
struct dn_long_packet {
|
||||
__u8 msgflg;
|
||||
@@ -115,7 +115,7 @@ struct dn_long_packet {
|
||||
__u8 visit_ct;
|
||||
__u8 s_class;
|
||||
__u8 pt;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
/*------------------------- DRP - Routing messages ---------------------*/
|
||||
|
||||
@@ -132,7 +132,7 @@ struct endnode_hello_message {
|
||||
__u8 mpd;
|
||||
__u8 datalen;
|
||||
__u8 data[2];
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
struct rtnode_hello_message {
|
||||
__u8 msgflg;
|
||||
@@ -144,7 +144,7 @@ struct rtnode_hello_message {
|
||||
__u8 area;
|
||||
__le16 timer;
|
||||
__u8 mpd;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
|
||||
extern void dn_dev_init(void);
|
||||
|
||||
@@ -74,18 +74,18 @@ struct nsp_data_seg_msg {
|
||||
__u8 msgflg;
|
||||
__le16 dstaddr;
|
||||
__le16 srcaddr;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
struct nsp_data_opt_msg {
|
||||
__le16 acknum;
|
||||
__le16 segnum;
|
||||
__le16 lsflgs;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
struct nsp_data_opt_msg1 {
|
||||
__le16 acknum;
|
||||
__le16 segnum;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
|
||||
/* Acknowledgment Message (data/other data) */
|
||||
@@ -94,13 +94,13 @@ struct nsp_data_ack_msg {
|
||||
__le16 dstaddr;
|
||||
__le16 srcaddr;
|
||||
__le16 acknum;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
/* Connect Acknowledgment Message */
|
||||
struct nsp_conn_ack_msg {
|
||||
__u8 msgflg;
|
||||
__le16 dstaddr;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
|
||||
/* Connect Initiate/Retransmit Initiate/Connect Confirm */
|
||||
@@ -117,7 +117,7 @@ struct nsp_conn_init_msg {
|
||||
#define NSP_FC_MASK 0x0c /* FC type mask */
|
||||
__u8 info;
|
||||
__le16 segsize;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
/* Disconnect Initiate/Disconnect Confirm */
|
||||
struct nsp_disconn_init_msg {
|
||||
@@ -125,7 +125,7 @@ struct nsp_disconn_init_msg {
|
||||
__le16 dstaddr;
|
||||
__le16 srcaddr;
|
||||
__le16 reason;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
|
||||
|
||||
@@ -135,7 +135,7 @@ struct srcobj_fmt {
|
||||
__le16 grpcode;
|
||||
__le16 usrcode;
|
||||
__u8 dlen;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* A collection of functions for manipulating the sequence
|
||||
|
||||
@@ -65,9 +65,7 @@ extern void dn_rt_cache_flush(int delay);
|
||||
* packets to the originating host.
|
||||
*/
|
||||
struct dn_route {
|
||||
union {
|
||||
struct dst_entry dst;
|
||||
} u;
|
||||
struct dst_entry dst;
|
||||
|
||||
struct flowi fl;
|
||||
|
||||
|
||||
+2
-13
@@ -68,26 +68,15 @@ struct genl_info {
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef CONFIG_NET_NS
|
||||
static inline struct net *genl_info_net(struct genl_info *info)
|
||||
{
|
||||
return info->_net;
|
||||
return read_pnet(&info->_net);
|
||||
}
|
||||
|
||||
static inline void genl_info_net_set(struct genl_info *info, struct net *net)
|
||||
{
|
||||
info->_net = net;
|
||||
write_pnet(&info->_net, net);
|
||||
}
|
||||
#else
|
||||
static inline struct net *genl_info_net(struct genl_info *info)
|
||||
{
|
||||
return &init_net;
|
||||
}
|
||||
|
||||
static inline void genl_info_net_set(struct genl_info *info, struct net *net)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* struct genl_ops - generic netlink operations
|
||||
|
||||
+24
-35
@@ -1,8 +1,8 @@
|
||||
#ifndef _INET_COMMON_H
|
||||
#define _INET_COMMON_H
|
||||
|
||||
extern const struct proto_ops inet_stream_ops;
|
||||
extern const struct proto_ops inet_dgram_ops;
|
||||
extern const struct proto_ops inet_stream_ops;
|
||||
extern const struct proto_ops inet_dgram_ops;
|
||||
|
||||
/*
|
||||
* INET4 prototypes used by INET6
|
||||
@@ -13,37 +13,28 @@ struct sock;
|
||||
struct sockaddr;
|
||||
struct socket;
|
||||
|
||||
extern int inet_release(struct socket *sock);
|
||||
extern int inet_stream_connect(struct socket *sock,
|
||||
struct sockaddr * uaddr,
|
||||
int addr_len, int flags);
|
||||
extern int inet_dgram_connect(struct socket *sock,
|
||||
struct sockaddr * uaddr,
|
||||
int addr_len, int flags);
|
||||
extern int inet_accept(struct socket *sock,
|
||||
struct socket *newsock, int flags);
|
||||
extern int inet_sendmsg(struct kiocb *iocb,
|
||||
struct socket *sock,
|
||||
struct msghdr *msg,
|
||||
size_t size);
|
||||
extern int inet_shutdown(struct socket *sock, int how);
|
||||
extern int inet_listen(struct socket *sock, int backlog);
|
||||
|
||||
extern void inet_sock_destruct(struct sock *sk);
|
||||
|
||||
extern int inet_bind(struct socket *sock,
|
||||
struct sockaddr *uaddr, int addr_len);
|
||||
extern int inet_getname(struct socket *sock,
|
||||
struct sockaddr *uaddr,
|
||||
int *uaddr_len, int peer);
|
||||
extern int inet_ioctl(struct socket *sock,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
|
||||
extern int inet_ctl_sock_create(struct sock **sk,
|
||||
unsigned short family,
|
||||
unsigned short type,
|
||||
unsigned char protocol,
|
||||
struct net *net);
|
||||
extern int inet_release(struct socket *sock);
|
||||
extern int inet_stream_connect(struct socket *sock, struct sockaddr * uaddr,
|
||||
int addr_len, int flags);
|
||||
extern int inet_dgram_connect(struct socket *sock, struct sockaddr * uaddr,
|
||||
int addr_len, int flags);
|
||||
extern int inet_accept(struct socket *sock, struct socket *newsock, int flags);
|
||||
extern int inet_sendmsg(struct kiocb *iocb, struct socket *sock,
|
||||
struct msghdr *msg, size_t size);
|
||||
extern ssize_t inet_sendpage(struct socket *sock, struct page *page, int offset,
|
||||
size_t size, int flags);
|
||||
extern int inet_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
struct msghdr *msg, size_t size, int flags);
|
||||
extern int inet_shutdown(struct socket *sock, int how);
|
||||
extern int inet_listen(struct socket *sock, int backlog);
|
||||
extern void inet_sock_destruct(struct sock *sk);
|
||||
extern int inet_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len);
|
||||
extern int inet_getname(struct socket *sock, struct sockaddr *uaddr,
|
||||
int *uaddr_len, int peer);
|
||||
extern int inet_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
|
||||
extern int inet_ctl_sock_create(struct sock **sk, unsigned short family,
|
||||
unsigned short type, unsigned char protocol,
|
||||
struct net *net);
|
||||
|
||||
static inline void inet_ctl_sock_destroy(struct sock *sk)
|
||||
{
|
||||
@@ -51,5 +42,3 @@ static inline void inet_ctl_sock_destroy(struct sock *sk)
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ struct inet_frag_queue {
|
||||
atomic_t refcnt;
|
||||
struct timer_list timer; /* when will this queue expire? */
|
||||
struct sk_buff *fragments; /* list of received fragments */
|
||||
struct sk_buff *fragments_tail;
|
||||
ktime_t stamp;
|
||||
int len; /* total length of orig datagram */
|
||||
int meat;
|
||||
|
||||
@@ -137,7 +137,8 @@ struct inet_sock {
|
||||
hdrincl:1,
|
||||
mc_loop:1,
|
||||
transparent:1,
|
||||
mc_all:1;
|
||||
mc_all:1,
|
||||
nodefrag:1;
|
||||
int mc_index;
|
||||
__be32 mc_addr;
|
||||
struct ip_mc_socklist *mc_list;
|
||||
|
||||
+26
-4
@@ -22,10 +22,21 @@ struct inet_peer {
|
||||
__u32 dtime; /* the time of last use of not
|
||||
* referenced entries */
|
||||
atomic_t refcnt;
|
||||
atomic_t rid; /* Frag reception counter */
|
||||
atomic_t ip_id_count; /* IP ID for the next packet */
|
||||
__u32 tcp_ts;
|
||||
__u32 tcp_ts_stamp;
|
||||
/*
|
||||
* Once inet_peer is queued for deletion (refcnt == -1), following fields
|
||||
* are not available: rid, ip_id_count, tcp_ts, tcp_ts_stamp
|
||||
* We can share memory with rcu_head to keep inet_peer small
|
||||
* (less then 64 bytes)
|
||||
*/
|
||||
union {
|
||||
struct {
|
||||
atomic_t rid; /* Frag reception counter */
|
||||
atomic_t ip_id_count; /* IP ID for the next packet */
|
||||
__u32 tcp_ts;
|
||||
__u32 tcp_ts_stamp;
|
||||
};
|
||||
struct rcu_head rcu;
|
||||
};
|
||||
};
|
||||
|
||||
void inet_initpeers(void) __init;
|
||||
@@ -36,10 +47,21 @@ struct inet_peer *inet_getpeer(__be32 daddr, int create);
|
||||
/* can be called from BH context or outside */
|
||||
extern void inet_putpeer(struct inet_peer *p);
|
||||
|
||||
/*
|
||||
* temporary check to make sure we dont access rid, ip_id_count, tcp_ts,
|
||||
* tcp_ts_stamp if no refcount is taken on inet_peer
|
||||
*/
|
||||
static inline void inet_peer_refcheck(const struct inet_peer *p)
|
||||
{
|
||||
WARN_ON_ONCE(atomic_read(&p->refcnt) <= 0);
|
||||
}
|
||||
|
||||
|
||||
/* can be called with or without local BH being disabled */
|
||||
static inline __u16 inet_getid(struct inet_peer *p, int more)
|
||||
{
|
||||
more++;
|
||||
inet_peer_refcheck(p);
|
||||
return atomic_add_return(more, &p->ip_id_count) - more;
|
||||
}
|
||||
|
||||
|
||||
+20
-9
@@ -61,11 +61,14 @@ struct ipcm_cookie {
|
||||
struct ip_ra_chain {
|
||||
struct ip_ra_chain *next;
|
||||
struct sock *sk;
|
||||
void (*destructor)(struct sock *);
|
||||
union {
|
||||
void (*destructor)(struct sock *);
|
||||
struct sock *saved_sk;
|
||||
};
|
||||
struct rcu_head rcu;
|
||||
};
|
||||
|
||||
extern struct ip_ra_chain *ip_ra_chain;
|
||||
extern rwlock_t ip_ra_lock;
|
||||
|
||||
/* IP flags. */
|
||||
#define IP_CE 0x8000 /* Flag: "Congestion" */
|
||||
@@ -162,12 +165,12 @@ struct ipv4_config {
|
||||
};
|
||||
|
||||
extern struct ipv4_config ipv4_config;
|
||||
#define IP_INC_STATS(net, field) SNMP_INC_STATS((net)->mib.ip_statistics, field)
|
||||
#define IP_INC_STATS_BH(net, field) SNMP_INC_STATS_BH((net)->mib.ip_statistics, field)
|
||||
#define IP_ADD_STATS(net, field, val) SNMP_ADD_STATS((net)->mib.ip_statistics, field, val)
|
||||
#define IP_ADD_STATS_BH(net, field, val) SNMP_ADD_STATS_BH((net)->mib.ip_statistics, field, val)
|
||||
#define IP_UPD_PO_STATS(net, field, val) SNMP_UPD_PO_STATS((net)->mib.ip_statistics, field, val)
|
||||
#define IP_UPD_PO_STATS_BH(net, field, val) SNMP_UPD_PO_STATS_BH((net)->mib.ip_statistics, field, val)
|
||||
#define IP_INC_STATS(net, field) SNMP_INC_STATS64((net)->mib.ip_statistics, field)
|
||||
#define IP_INC_STATS_BH(net, field) SNMP_INC_STATS64_BH((net)->mib.ip_statistics, field)
|
||||
#define IP_ADD_STATS(net, field, val) SNMP_ADD_STATS64((net)->mib.ip_statistics, field, val)
|
||||
#define IP_ADD_STATS_BH(net, field, val) SNMP_ADD_STATS64_BH((net)->mib.ip_statistics, field, val)
|
||||
#define IP_UPD_PO_STATS(net, field, val) SNMP_UPD_PO_STATS64((net)->mib.ip_statistics, field, val)
|
||||
#define IP_UPD_PO_STATS_BH(net, field, val) SNMP_UPD_PO_STATS64_BH((net)->mib.ip_statistics, field, val)
|
||||
#define NET_INC_STATS(net, field) SNMP_INC_STATS((net)->mib.net_statistics, field)
|
||||
#define NET_INC_STATS_BH(net, field) SNMP_INC_STATS_BH((net)->mib.net_statistics, field)
|
||||
#define NET_INC_STATS_USER(net, field) SNMP_INC_STATS_USER((net)->mib.net_statistics, field)
|
||||
@@ -175,7 +178,15 @@ extern struct ipv4_config ipv4_config;
|
||||
#define NET_ADD_STATS_USER(net, field, adnd) SNMP_ADD_STATS_USER((net)->mib.net_statistics, field, adnd)
|
||||
|
||||
extern unsigned long snmp_fold_field(void __percpu *mib[], int offt);
|
||||
extern int snmp_mib_init(void __percpu *ptr[2], size_t mibsize);
|
||||
#if BITS_PER_LONG==32
|
||||
extern u64 snmp_fold_field64(void __percpu *mib[], int offt, size_t sync_off);
|
||||
#else
|
||||
static inline u64 snmp_fold_field64(void __percpu *mib[], int offt, size_t syncp_off)
|
||||
{
|
||||
return snmp_fold_field(mib, offt);
|
||||
}
|
||||
#endif
|
||||
extern int snmp_mib_init(void __percpu *ptr[2], size_t mibsize, size_t align);
|
||||
extern void snmp_mib_free(void __percpu *ptr[2]);
|
||||
|
||||
extern struct local_ports {
|
||||
|
||||
@@ -84,13 +84,11 @@ struct rt6key {
|
||||
struct fib6_table;
|
||||
|
||||
struct rt6_info {
|
||||
union {
|
||||
struct dst_entry dst;
|
||||
} u;
|
||||
struct dst_entry dst;
|
||||
|
||||
#define rt6i_dev u.dst.dev
|
||||
#define rt6i_nexthop u.dst.neighbour
|
||||
#define rt6i_expires u.dst.expires
|
||||
#define rt6i_dev dst.dev
|
||||
#define rt6i_nexthop dst.neighbour
|
||||
#define rt6i_expires dst.expires
|
||||
|
||||
/*
|
||||
* Tail elements of dst_entry (__refcnt etc.)
|
||||
|
||||
@@ -27,6 +27,6 @@ struct ipv6_tlv_tnl_enc_lim {
|
||||
__u8 type; /* type-code for option */
|
||||
__u8 length; /* option length */
|
||||
__u8 encap_limit; /* tunnel encapsulation limit */
|
||||
} __attribute__ ((packed));
|
||||
} __packed;
|
||||
|
||||
#endif
|
||||
|
||||
+12
-2
@@ -632,10 +632,22 @@ extern struct ip_vs_conn *ip_vs_ct_in_get
|
||||
(int af, int protocol, const union nf_inet_addr *s_addr, __be16 s_port,
|
||||
const union nf_inet_addr *d_addr, __be16 d_port);
|
||||
|
||||
struct ip_vs_conn * ip_vs_conn_in_get_proto(int af, const struct sk_buff *skb,
|
||||
struct ip_vs_protocol *pp,
|
||||
const struct ip_vs_iphdr *iph,
|
||||
unsigned int proto_off,
|
||||
int inverse);
|
||||
|
||||
extern struct ip_vs_conn *ip_vs_conn_out_get
|
||||
(int af, int protocol, const union nf_inet_addr *s_addr, __be16 s_port,
|
||||
const union nf_inet_addr *d_addr, __be16 d_port);
|
||||
|
||||
struct ip_vs_conn * ip_vs_conn_out_get_proto(int af, const struct sk_buff *skb,
|
||||
struct ip_vs_protocol *pp,
|
||||
const struct ip_vs_iphdr *iph,
|
||||
unsigned int proto_off,
|
||||
int inverse);
|
||||
|
||||
/* put back the conn without restarting its timer */
|
||||
static inline void __ip_vs_conn_put(struct ip_vs_conn *cp)
|
||||
{
|
||||
@@ -736,8 +748,6 @@ extern void ip_vs_app_inc_put(struct ip_vs_app *inc);
|
||||
|
||||
extern int ip_vs_app_pkt_out(struct ip_vs_conn *, struct sk_buff *skb);
|
||||
extern int ip_vs_app_pkt_in(struct ip_vs_conn *, struct sk_buff *skb);
|
||||
extern int ip_vs_skb_replace(struct sk_buff *skb, gfp_t pri,
|
||||
char *o_buf, int o_len, char *n_buf, int n_len);
|
||||
extern int ip_vs_app_init(void);
|
||||
extern void ip_vs_app_cleanup(void);
|
||||
|
||||
|
||||
+1
-1
@@ -50,7 +50,7 @@ struct ip_tunnel_prl_entry {
|
||||
int pkt_len = skb->len - skb_transport_offset(skb); \
|
||||
\
|
||||
skb->ip_summed = CHECKSUM_NONE; \
|
||||
ip_select_ident(iph, &rt->u.dst, NULL); \
|
||||
ip_select_ident(iph, &rt->dst, NULL); \
|
||||
\
|
||||
err = ip_local_out(skb); \
|
||||
if (likely(net_xmit_eval(err) == 0)) { \
|
||||
|
||||
+10
-6
@@ -136,17 +136,17 @@ extern struct ctl_path net_ipv6_ctl_path[];
|
||||
/* MIBs */
|
||||
|
||||
#define IP6_INC_STATS(net, idev,field) \
|
||||
_DEVINC(net, ipv6, , idev, field)
|
||||
_DEVINC(net, ipv6, 64, idev, field)
|
||||
#define IP6_INC_STATS_BH(net, idev,field) \
|
||||
_DEVINC(net, ipv6, _BH, idev, field)
|
||||
_DEVINC(net, ipv6, 64_BH, idev, field)
|
||||
#define IP6_ADD_STATS(net, idev,field,val) \
|
||||
_DEVADD(net, ipv6, , idev, field, val)
|
||||
_DEVADD(net, ipv6, 64, idev, field, val)
|
||||
#define IP6_ADD_STATS_BH(net, idev,field,val) \
|
||||
_DEVADD(net, ipv6, _BH, idev, field, val)
|
||||
_DEVADD(net, ipv6, 64_BH, idev, field, val)
|
||||
#define IP6_UPD_PO_STATS(net, idev,field,val) \
|
||||
_DEVUPD(net, ipv6, , idev, field, val)
|
||||
_DEVUPD(net, ipv6, 64, idev, field, val)
|
||||
#define IP6_UPD_PO_STATS_BH(net, idev,field,val) \
|
||||
_DEVUPD(net, ipv6, _BH, idev, field, val)
|
||||
_DEVUPD(net, ipv6, 64_BH, idev, field, val)
|
||||
#define ICMP6_INC_STATS(net, idev, field) \
|
||||
_DEVINC(net, icmpv6, , idev, field)
|
||||
#define ICMP6_INC_STATS_BH(net, idev, field) \
|
||||
@@ -551,6 +551,10 @@ extern int ipv6_ext_hdr(u8 nexthdr);
|
||||
|
||||
extern int ipv6_find_tlv(struct sk_buff *skb, int offset, int type);
|
||||
|
||||
extern struct in6_addr *fl6_update_dst(struct flowi *fl,
|
||||
const struct ipv6_txoptions *opt,
|
||||
struct in6_addr *orig);
|
||||
|
||||
/*
|
||||
* socket options (ipv6_sockglue.c)
|
||||
*/
|
||||
|
||||
+4
-4
@@ -27,9 +27,9 @@ struct ipx_address {
|
||||
#define IPX_MAX_PPROP_HOPS 8
|
||||
|
||||
struct ipxhdr {
|
||||
__be16 ipx_checksum __attribute__ ((packed));
|
||||
__be16 ipx_checksum __packed;
|
||||
#define IPX_NO_CHECKSUM cpu_to_be16(0xFFFF)
|
||||
__be16 ipx_pktsize __attribute__ ((packed));
|
||||
__be16 ipx_pktsize __packed;
|
||||
__u8 ipx_tctrl;
|
||||
__u8 ipx_type;
|
||||
#define IPX_TYPE_UNKNOWN 0x00
|
||||
@@ -38,8 +38,8 @@ struct ipxhdr {
|
||||
#define IPX_TYPE_SPX 0x05 /* SPX protocol */
|
||||
#define IPX_TYPE_NCP 0x11 /* $lots for docs on this (SPIT) */
|
||||
#define IPX_TYPE_PPROP 0x14 /* complicated flood fill brdcast */
|
||||
struct ipx_address ipx_dest __attribute__ ((packed));
|
||||
struct ipx_address ipx_source __attribute__ ((packed));
|
||||
struct ipx_address ipx_dest __packed;
|
||||
struct ipx_address ipx_source __packed;
|
||||
};
|
||||
|
||||
static __inline__ struct ipxhdr *ipx_hdr(struct sk_buff *skb)
|
||||
|
||||
@@ -53,10 +53,6 @@ typedef __u32 magic_t;
|
||||
#ifndef IRDA_ALIGN
|
||||
# define IRDA_ALIGN __attribute__((aligned))
|
||||
#endif
|
||||
#ifndef IRDA_PACK
|
||||
# define IRDA_PACK __attribute__((packed))
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef CONFIG_IRDA_DEBUG
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@ struct discovery_t;
|
||||
struct disc_frame {
|
||||
__u8 caddr; /* Connection address */
|
||||
__u8 control;
|
||||
} IRDA_PACK;
|
||||
} __packed;
|
||||
|
||||
struct xid_frame {
|
||||
__u8 caddr; /* Connection address */
|
||||
@@ -96,41 +96,41 @@ struct xid_frame {
|
||||
__u8 flags; /* Discovery flags */
|
||||
__u8 slotnr;
|
||||
__u8 version;
|
||||
} IRDA_PACK;
|
||||
} __packed;
|
||||
|
||||
struct test_frame {
|
||||
__u8 caddr; /* Connection address */
|
||||
__u8 control;
|
||||
__le32 saddr; /* Source device address */
|
||||
__le32 daddr; /* Destination device address */
|
||||
} IRDA_PACK;
|
||||
} __packed;
|
||||
|
||||
struct ua_frame {
|
||||
__u8 caddr;
|
||||
__u8 control;
|
||||
__le32 saddr; /* Source device address */
|
||||
__le32 daddr; /* Dest device address */
|
||||
} IRDA_PACK;
|
||||
} __packed;
|
||||
|
||||
struct dm_frame {
|
||||
__u8 caddr; /* Connection address */
|
||||
__u8 control;
|
||||
} IRDA_PACK;
|
||||
} __packed;
|
||||
|
||||
struct rd_frame {
|
||||
__u8 caddr; /* Connection address */
|
||||
__u8 control;
|
||||
} IRDA_PACK;
|
||||
} __packed;
|
||||
|
||||
struct rr_frame {
|
||||
__u8 caddr; /* Connection address */
|
||||
__u8 control;
|
||||
} IRDA_PACK;
|
||||
} __packed;
|
||||
|
||||
struct i_frame {
|
||||
__u8 caddr;
|
||||
__u8 control;
|
||||
} IRDA_PACK;
|
||||
} __packed;
|
||||
|
||||
struct snrm_frame {
|
||||
__u8 caddr;
|
||||
@@ -138,7 +138,7 @@ struct snrm_frame {
|
||||
__le32 saddr;
|
||||
__le32 daddr;
|
||||
__u8 ncaddr;
|
||||
} IRDA_PACK;
|
||||
} __packed;
|
||||
|
||||
void irlap_queue_xmit(struct irlap_cb *self, struct sk_buff *skb);
|
||||
void irlap_send_discovery_xid_frame(struct irlap_cb *, int S, __u8 s,
|
||||
|
||||
@@ -54,9 +54,6 @@ struct lib80211_crypto_ops {
|
||||
/* deinitialize crypto context and free allocated private data */
|
||||
void (*deinit) (void *priv);
|
||||
|
||||
int (*build_iv) (struct sk_buff * skb, int hdr_len,
|
||||
u8 *key, int keylen, void *priv);
|
||||
|
||||
/* encrypt/decrypt return < 0 on error or >= 0 on success. The return
|
||||
* value from decrypt_mpdu is passed as the keyidx value for
|
||||
* decrypt_msdu. skb must have enough head and tail room for the
|
||||
|
||||
+89
-56
@@ -146,6 +146,9 @@ struct ieee80211_low_level_stats {
|
||||
* enabled/disabled (beaconing modes)
|
||||
* @BSS_CHANGED_CQM: Connection quality monitor config changed
|
||||
* @BSS_CHANGED_IBSS: IBSS join status changed
|
||||
* @BSS_CHANGED_ARP_FILTER: Hardware ARP filter address list or state changed.
|
||||
* @BSS_CHANGED_QOS: QoS for this association was enabled/disabled. Note
|
||||
* that it is only ever disabled for station mode.
|
||||
*/
|
||||
enum ieee80211_bss_change {
|
||||
BSS_CHANGED_ASSOC = 1<<0,
|
||||
@@ -160,10 +163,19 @@ enum ieee80211_bss_change {
|
||||
BSS_CHANGED_BEACON_ENABLED = 1<<9,
|
||||
BSS_CHANGED_CQM = 1<<10,
|
||||
BSS_CHANGED_IBSS = 1<<11,
|
||||
BSS_CHANGED_ARP_FILTER = 1<<12,
|
||||
BSS_CHANGED_QOS = 1<<13,
|
||||
|
||||
/* when adding here, make sure to change ieee80211_reconfig */
|
||||
};
|
||||
|
||||
/*
|
||||
* The maximum number of IPv4 addresses listed for ARP filtering. If the number
|
||||
* of addresses for an interface increase beyond this value, hardware ARP
|
||||
* filtering will be disabled.
|
||||
*/
|
||||
#define IEEE80211_BSS_ARP_ADDR_LIST_LEN 4
|
||||
|
||||
/**
|
||||
* struct ieee80211_bss_conf - holds the BSS's changing parameters
|
||||
*
|
||||
@@ -182,7 +194,9 @@ enum ieee80211_bss_change {
|
||||
* if the hardware cannot handle this it must set the
|
||||
* IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE hardware flag
|
||||
* @dtim_period: num of beacons before the next DTIM, for beaconing,
|
||||
* not valid in station mode (cf. hw conf ps_dtim_period)
|
||||
* valid in station mode only while @assoc is true and if also
|
||||
* requested by %IEEE80211_HW_NEED_DTIM_PERIOD (cf. also hw conf
|
||||
* @ps_dtim_period)
|
||||
* @timestamp: beacon timestamp
|
||||
* @beacon_int: beacon interval
|
||||
* @assoc_capability: capabilities taken from assoc resp
|
||||
@@ -199,6 +213,16 @@ enum ieee80211_bss_change {
|
||||
* @cqm_rssi_thold: Connection quality monitor RSSI threshold, a zero value
|
||||
* implies disabled
|
||||
* @cqm_rssi_hyst: Connection quality monitor RSSI hysteresis
|
||||
* @arp_addr_list: List of IPv4 addresses for hardware ARP filtering. The
|
||||
* may filter ARP queries targeted for other addresses than listed here.
|
||||
* The driver must allow ARP queries targeted for all address listed here
|
||||
* to pass through. An empty list implies no ARP queries need to pass.
|
||||
* @arp_addr_cnt: Number of addresses currently on the list.
|
||||
* @arp_filter_enabled: Enable ARP filtering - if enabled, the hardware may
|
||||
* filter ARP queries based on the @arp_addr_list, if disabled, the
|
||||
* hardware must not perform any ARP filtering. Note, that the filter will
|
||||
* be enabled also in promiscuous mode.
|
||||
* @qos: This is a QoS-enabled BSS.
|
||||
*/
|
||||
struct ieee80211_bss_conf {
|
||||
const u8 *bssid;
|
||||
@@ -219,6 +243,10 @@ struct ieee80211_bss_conf {
|
||||
s32 cqm_rssi_thold;
|
||||
u32 cqm_rssi_hyst;
|
||||
enum nl80211_channel_type channel_type;
|
||||
__be32 arp_addr_list[IEEE80211_BSS_ARP_ADDR_LIST_LEN];
|
||||
u8 arp_addr_cnt;
|
||||
bool arp_filter_enabled;
|
||||
bool qos;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -312,9 +340,10 @@ enum mac80211_tx_control_flags {
|
||||
IEEE80211_TX_INTFL_NL80211_FRAME_TX = BIT(21),
|
||||
IEEE80211_TX_CTL_LDPC = BIT(22),
|
||||
IEEE80211_TX_CTL_STBC = BIT(23) | BIT(24),
|
||||
#define IEEE80211_TX_CTL_STBC_SHIFT 23
|
||||
};
|
||||
|
||||
#define IEEE80211_TX_CTL_STBC_SHIFT 23
|
||||
|
||||
/**
|
||||
* enum mac80211_rate_control_flags - per-rate flags set by the
|
||||
* Rate Control algorithm.
|
||||
@@ -390,7 +419,7 @@ struct ieee80211_tx_rate {
|
||||
s8 idx;
|
||||
u8 count;
|
||||
u8 flags;
|
||||
} __attribute__((packed));
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
* struct ieee80211_tx_info - skb transmit information
|
||||
@@ -412,8 +441,6 @@ struct ieee80211_tx_rate {
|
||||
* @driver_data: array of driver_data pointers
|
||||
* @ampdu_ack_len: number of acked aggregated frames.
|
||||
* relevant only if IEEE80211_TX_STAT_AMPDU was set.
|
||||
* @ampdu_ack_map: block ack bit map for the aggregation.
|
||||
* relevant only if IEEE80211_TX_STAT_AMPDU was set.
|
||||
* @ampdu_len: number of aggregated frames.
|
||||
* relevant only if IEEE80211_TX_STAT_AMPDU was set.
|
||||
* @ack_signal: signal strength of the ACK frame
|
||||
@@ -448,10 +475,9 @@ struct ieee80211_tx_info {
|
||||
struct {
|
||||
struct ieee80211_tx_rate rates[IEEE80211_TX_MAX_RATES];
|
||||
u8 ampdu_ack_len;
|
||||
u64 ampdu_ack_map;
|
||||
int ack_signal;
|
||||
u8 ampdu_len;
|
||||
/* 7 bytes free */
|
||||
/* 15 bytes free */
|
||||
} status;
|
||||
struct {
|
||||
struct ieee80211_tx_rate driver_rates[
|
||||
@@ -601,15 +627,14 @@ struct ieee80211_rx_status {
|
||||
* may turn the device off as much as possible. Typically, this flag will
|
||||
* be set when an interface is set UP but not associated or scanning, but
|
||||
* it can also be unset in that case when monitor interfaces are active.
|
||||
* @IEEE80211_CONF_QOS: Enable 802.11e QoS also know as WMM (Wireless
|
||||
* Multimedia). On some drivers (iwlwifi is one of know) we have
|
||||
* to enable/disable QoS explicitly.
|
||||
* @IEEE80211_CONF_OFFCHANNEL: The device is currently not on its main
|
||||
* operating channel.
|
||||
*/
|
||||
enum ieee80211_conf_flags {
|
||||
IEEE80211_CONF_MONITOR = (1<<0),
|
||||
IEEE80211_CONF_PS = (1<<1),
|
||||
IEEE80211_CONF_IDLE = (1<<2),
|
||||
IEEE80211_CONF_QOS = (1<<3),
|
||||
IEEE80211_CONF_OFFCHANNEL = (1<<3),
|
||||
};
|
||||
|
||||
|
||||
@@ -624,7 +649,6 @@ enum ieee80211_conf_flags {
|
||||
* @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed
|
||||
* @IEEE80211_CONF_CHANGE_IDLE: Idle flag changed
|
||||
* @IEEE80211_CONF_CHANGE_SMPS: Spatial multiplexing powersave mode changed
|
||||
* @IEEE80211_CONF_CHANGE_QOS: Quality of service was enabled or disabled
|
||||
*/
|
||||
enum ieee80211_conf_changed {
|
||||
IEEE80211_CONF_CHANGE_SMPS = BIT(1),
|
||||
@@ -635,7 +659,6 @@ enum ieee80211_conf_changed {
|
||||
IEEE80211_CONF_CHANGE_CHANNEL = BIT(6),
|
||||
IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(7),
|
||||
IEEE80211_CONF_CHANGE_IDLE = BIT(8),
|
||||
IEEE80211_CONF_CHANGE_QOS = BIT(9),
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -676,9 +699,6 @@ enum ieee80211_smps_mode {
|
||||
* @dynamic_ps_timeout: The dynamic powersave timeout (in ms), see the
|
||||
* powersave documentation below. This variable is valid only when
|
||||
* the CONF_PS flag is set.
|
||||
* @dynamic_ps_forced_timeout: The dynamic powersave timeout (in ms) configured
|
||||
* by cfg80211 (essentially, wext) If set, this value overrules the value
|
||||
* chosen by mac80211 based on ps qos network latency.
|
||||
*
|
||||
* @power_level: requested transmit power (in dBm)
|
||||
*
|
||||
@@ -698,7 +718,7 @@ enum ieee80211_smps_mode {
|
||||
*/
|
||||
struct ieee80211_conf {
|
||||
u32 flags;
|
||||
int power_level, dynamic_ps_timeout, dynamic_ps_forced_timeout;
|
||||
int power_level, dynamic_ps_timeout;
|
||||
int max_sleep_period;
|
||||
|
||||
u16 listen_interval;
|
||||
@@ -815,7 +835,6 @@ enum ieee80211_key_flags {
|
||||
* encrypted in hardware.
|
||||
* @alg: The key algorithm.
|
||||
* @flags: key flags, see &enum ieee80211_key_flags.
|
||||
* @ap_addr: AP's MAC address
|
||||
* @keyidx: the key index (0-3)
|
||||
* @keylen: key material length
|
||||
* @key: key material. For ALG_TKIP the key is encoded as a 256-bit (32 byte)
|
||||
@@ -881,16 +900,12 @@ struct ieee80211_sta {
|
||||
* enum sta_notify_cmd - sta notify command
|
||||
*
|
||||
* Used with the sta_notify() callback in &struct ieee80211_ops, this
|
||||
* indicates addition and removal of a station to station table,
|
||||
* or if a associated station made a power state transition.
|
||||
* indicates if an associated station made a power state transition.
|
||||
*
|
||||
* @STA_NOTIFY_ADD: (DEPRECATED) a station was added to the station table
|
||||
* @STA_NOTIFY_REMOVE: (DEPRECATED) a station being removed from the station table
|
||||
* @STA_NOTIFY_SLEEP: a station is now sleeping
|
||||
* @STA_NOTIFY_AWAKE: a sleeping station woke up
|
||||
*/
|
||||
enum sta_notify_cmd {
|
||||
STA_NOTIFY_ADD, STA_NOTIFY_REMOVE,
|
||||
STA_NOTIFY_SLEEP, STA_NOTIFY_AWAKE,
|
||||
};
|
||||
|
||||
@@ -1014,6 +1029,9 @@ enum ieee80211_tkip_key_type {
|
||||
* connection quality related parameters, such as the RSSI level and
|
||||
* provide notifications if configured trigger levels are reached.
|
||||
*
|
||||
* @IEEE80211_HW_NEED_DTIM_PERIOD:
|
||||
* This device needs to know the DTIM period for the BSS before
|
||||
* associating.
|
||||
*/
|
||||
enum ieee80211_hw_flags {
|
||||
IEEE80211_HW_HAS_RATE_CONTROL = 1<<0,
|
||||
@@ -1023,7 +1041,7 @@ enum ieee80211_hw_flags {
|
||||
IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE = 1<<4,
|
||||
IEEE80211_HW_SIGNAL_UNSPEC = 1<<5,
|
||||
IEEE80211_HW_SIGNAL_DBM = 1<<6,
|
||||
/* use this hole */
|
||||
IEEE80211_HW_NEED_DTIM_PERIOD = 1<<7,
|
||||
IEEE80211_HW_SPECTRUM_MGMT = 1<<8,
|
||||
IEEE80211_HW_AMPDU_AGGREGATION = 1<<9,
|
||||
IEEE80211_HW_SUPPORTS_PS = 1<<10,
|
||||
@@ -1260,6 +1278,15 @@ ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw,
|
||||
* dynamic PS feature in stack and will just keep %IEEE80211_CONF_PS
|
||||
* enabled whenever user has enabled powersave.
|
||||
*
|
||||
* Some hardware need to toggle a single shared antenna between WLAN and
|
||||
* Bluetooth to facilitate co-existence. These types of hardware set
|
||||
* limitations on the use of host controlled dynamic powersave whenever there
|
||||
* is simultaneous WLAN and Bluetooth traffic. For these types of hardware, the
|
||||
* driver may request temporarily going into full power save, in order to
|
||||
* enable toggling the antenna between BT and WLAN. If the driver requests
|
||||
* disabling dynamic powersave, the @dynamic_ps_timeout value will be
|
||||
* temporarily set to zero until the driver re-enables dynamic powersave.
|
||||
*
|
||||
* Driver informs U-APSD client support by enabling
|
||||
* %IEEE80211_HW_SUPPORTS_UAPSD flag. The mode is configured through the
|
||||
* uapsd paramater in conf_tx() operation. Hardware needs to send the QoS
|
||||
@@ -1451,7 +1478,7 @@ enum ieee80211_filter_flags {
|
||||
*
|
||||
* Note that drivers MUST be able to deal with a TX aggregation
|
||||
* session being stopped even before they OK'ed starting it by
|
||||
* calling ieee80211_start_tx_ba_cb(_irqsafe), because the peer
|
||||
* calling ieee80211_start_tx_ba_cb_irqsafe, because the peer
|
||||
* might receive the addBA frame and send a delBA right away!
|
||||
*
|
||||
* @IEEE80211_AMPDU_RX_START: start Rx aggregation
|
||||
@@ -1636,7 +1663,7 @@ enum ieee80211_ampdu_mlme_action {
|
||||
* is the first frame we expect to perform the action on. Notice
|
||||
* that TX/RX_STOP can pass NULL for this parameter.
|
||||
* Returns a negative error code on failure.
|
||||
* The callback must be atomic.
|
||||
* The callback can sleep.
|
||||
*
|
||||
* @get_survey: Return per-channel survey information
|
||||
*
|
||||
@@ -2306,17 +2333,6 @@ void ieee80211_queue_delayed_work(struct ieee80211_hw *hw,
|
||||
*/
|
||||
int ieee80211_start_tx_ba_session(struct ieee80211_sta *sta, u16 tid);
|
||||
|
||||
/**
|
||||
* ieee80211_start_tx_ba_cb - low level driver ready to aggregate.
|
||||
* @vif: &struct ieee80211_vif pointer from the add_interface callback
|
||||
* @ra: receiver address of the BA session recipient.
|
||||
* @tid: the TID to BA on.
|
||||
*
|
||||
* This function must be called by low level driver once it has
|
||||
* finished with preparations for the BA session.
|
||||
*/
|
||||
void ieee80211_start_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u16 tid);
|
||||
|
||||
/**
|
||||
* ieee80211_start_tx_ba_cb_irqsafe - low level driver ready to aggregate.
|
||||
* @vif: &struct ieee80211_vif pointer from the add_interface callback
|
||||
@@ -2324,8 +2340,8 @@ void ieee80211_start_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u16 tid);
|
||||
* @tid: the TID to BA on.
|
||||
*
|
||||
* This function must be called by low level driver once it has
|
||||
* finished with preparations for the BA session.
|
||||
* This version of the function is IRQ-safe.
|
||||
* finished with preparations for the BA session. It can be called
|
||||
* from any context.
|
||||
*/
|
||||
void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra,
|
||||
u16 tid);
|
||||
@@ -2334,27 +2350,14 @@ void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra,
|
||||
* ieee80211_stop_tx_ba_session - Stop a Block Ack session.
|
||||
* @sta: the station whose BA session to stop
|
||||
* @tid: the TID to stop BA.
|
||||
* @initiator: if indicates initiator DELBA frame will be sent.
|
||||
*
|
||||
* Return: error if no sta with matching da found, success otherwise
|
||||
* Return: negative error if the TID is invalid, or no aggregation active
|
||||
*
|
||||
* Although mac80211/low level driver/user space application can estimate
|
||||
* the need to stop aggregation on a certain RA/TID, the session level
|
||||
* will be managed by the mac80211.
|
||||
*/
|
||||
int ieee80211_stop_tx_ba_session(struct ieee80211_sta *sta, u16 tid,
|
||||
enum ieee80211_back_parties initiator);
|
||||
|
||||
/**
|
||||
* ieee80211_stop_tx_ba_cb - low level driver ready to stop aggregate.
|
||||
* @vif: &struct ieee80211_vif pointer from the add_interface callback
|
||||
* @ra: receiver address of the BA session recipient.
|
||||
* @tid: the desired TID to BA on.
|
||||
*
|
||||
* This function must be called by low level driver once it has
|
||||
* finished with preparations for the BA session tear down.
|
||||
*/
|
||||
void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid);
|
||||
int ieee80211_stop_tx_ba_session(struct ieee80211_sta *sta, u16 tid);
|
||||
|
||||
/**
|
||||
* ieee80211_stop_tx_ba_cb_irqsafe - low level driver ready to stop aggregate.
|
||||
@@ -2363,8 +2366,8 @@ void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid);
|
||||
* @tid: the desired TID to BA on.
|
||||
*
|
||||
* This function must be called by low level driver once it has
|
||||
* finished with preparations for the BA session tear down.
|
||||
* This version of the function is IRQ-safe.
|
||||
* finished with preparations for the BA session tear down. It
|
||||
* can be called from any context.
|
||||
*/
|
||||
void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra,
|
||||
u16 tid);
|
||||
@@ -2459,6 +2462,36 @@ void ieee80211_beacon_loss(struct ieee80211_vif *vif);
|
||||
*/
|
||||
void ieee80211_connection_loss(struct ieee80211_vif *vif);
|
||||
|
||||
/**
|
||||
* ieee80211_disable_dyn_ps - force mac80211 to temporarily disable dynamic psm
|
||||
*
|
||||
* @vif: &struct ieee80211_vif pointer from the add_interface callback.
|
||||
*
|
||||
* Some hardware require full power save to manage simultaneous BT traffic
|
||||
* on the WLAN frequency. Full PSM is required periodically, whenever there are
|
||||
* burst of BT traffic. The hardware gets information of BT traffic via
|
||||
* hardware co-existence lines, and consequentially requests mac80211 to
|
||||
* (temporarily) enter full psm.
|
||||
* This function will only temporarily disable dynamic PS, not enable PSM if
|
||||
* it was not already enabled.
|
||||
* The driver must make sure to re-enable dynamic PS using
|
||||
* ieee80211_enable_dyn_ps() if the driver has disabled it.
|
||||
*
|
||||
*/
|
||||
void ieee80211_disable_dyn_ps(struct ieee80211_vif *vif);
|
||||
|
||||
/**
|
||||
* ieee80211_enable_dyn_ps - restore dynamic psm after being disabled
|
||||
*
|
||||
* @vif: &struct ieee80211_vif pointer from the add_interface callback.
|
||||
*
|
||||
* This function restores dynamic PS after being temporarily disabled via
|
||||
* ieee80211_disable_dyn_ps(). Each ieee80211_disable_dyn_ps() call must
|
||||
* be coupled with an eventual call to this function.
|
||||
*
|
||||
*/
|
||||
void ieee80211_enable_dyn_ps(struct ieee80211_vif *vif);
|
||||
|
||||
/**
|
||||
* ieee80211_cqm_rssi_notify - inform a configured connection quality monitoring
|
||||
* rssi threshold triggered
|
||||
|
||||
+1
-1
@@ -39,7 +39,7 @@ struct ip6_mh {
|
||||
__u16 ip6mh_cksum;
|
||||
/* Followed by type specific messages */
|
||||
__u8 data[0];
|
||||
} __attribute__ ((__packed__));
|
||||
} __packed;
|
||||
|
||||
#define IP6_MH_TYPE_BRR 0 /* Binding Refresh Request */
|
||||
#define IP6_MH_TYPE_HOTI 1 /* HOTI Message */
|
||||
|
||||
+1
-1
@@ -82,7 +82,7 @@ struct ra_msg {
|
||||
struct nd_opt_hdr {
|
||||
__u8 nd_opt_type;
|
||||
__u8 nd_opt_len;
|
||||
} __attribute__((__packed__));
|
||||
} __packed;
|
||||
|
||||
|
||||
extern int ndisc_init(void);
|
||||
|
||||
@@ -151,7 +151,7 @@ struct neigh_table {
|
||||
void (*proxy_redo)(struct sk_buff *skb);
|
||||
char *id;
|
||||
struct neigh_parms parms;
|
||||
/* HACK. gc_* shoul follow parms without a gap! */
|
||||
/* HACK. gc_* should follow parms without a gap! */
|
||||
int gc_interval;
|
||||
int gc_thresh1;
|
||||
int gc_thresh2;
|
||||
|
||||
@@ -152,11 +152,7 @@ extern struct net init_net;
|
||||
|
||||
static inline struct net *nf_ct_net(const struct nf_conn *ct)
|
||||
{
|
||||
#ifdef CONFIG_NET_NS
|
||||
return ct->ct_net;
|
||||
#else
|
||||
return &init_net;
|
||||
#endif
|
||||
return read_pnet(&ct->ct_net);
|
||||
}
|
||||
|
||||
/* Alter reply tuple (maybe alter helper). */
|
||||
@@ -261,7 +257,12 @@ extern s16 (*nf_ct_nat_offset)(const struct nf_conn *ct,
|
||||
u32 seq);
|
||||
|
||||
/* Fake conntrack entry for untracked connections */
|
||||
extern struct nf_conn nf_conntrack_untracked;
|
||||
DECLARE_PER_CPU(struct nf_conn, nf_conntrack_untracked);
|
||||
static inline struct nf_conn *nf_ct_untracked_get(void)
|
||||
{
|
||||
return &__raw_get_cpu_var(nf_conntrack_untracked);
|
||||
}
|
||||
extern void nf_ct_untracked_status_or(unsigned long bits);
|
||||
|
||||
/* Iterate over all conntracks: if iter returns true, it's deleted. */
|
||||
extern void
|
||||
@@ -289,9 +290,9 @@ static inline int nf_ct_is_dying(struct nf_conn *ct)
|
||||
return test_bit(IPS_DYING_BIT, &ct->status);
|
||||
}
|
||||
|
||||
static inline int nf_ct_is_untracked(const struct sk_buff *skb)
|
||||
static inline int nf_ct_is_untracked(const struct nf_conn *ct)
|
||||
{
|
||||
return (skb->nfct == &nf_conntrack_untracked.ct_general);
|
||||
return test_bit(IPS_UNTRACKED_BIT, &ct->status);
|
||||
}
|
||||
|
||||
extern int nf_conntrack_set_hashsize(const char *val, struct kernel_param *kp);
|
||||
|
||||
@@ -45,6 +45,18 @@ struct nf_conn_counter *nf_ct_acct_ext_add(struct nf_conn *ct, gfp_t gfp)
|
||||
extern unsigned int
|
||||
seq_print_acct(struct seq_file *s, const struct nf_conn *ct, int dir);
|
||||
|
||||
/* Check if connection tracking accounting is enabled */
|
||||
static inline bool nf_ct_acct_enabled(struct net *net)
|
||||
{
|
||||
return net->ct.sysctl_acct != 0;
|
||||
}
|
||||
|
||||
/* Enable/disable connection tracking accounting */
|
||||
static inline void nf_ct_set_acct(struct net *net, bool enable)
|
||||
{
|
||||
net->ct.sysctl_acct = enable;
|
||||
}
|
||||
|
||||
extern int nf_conntrack_acct_init(struct net *net);
|
||||
extern void nf_conntrack_acct_fini(struct net *net);
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@ static inline int nf_conntrack_confirm(struct sk_buff *skb)
|
||||
struct nf_conn *ct = (struct nf_conn *)skb->nfct;
|
||||
int ret = NF_ACCEPT;
|
||||
|
||||
if (ct && ct != &nf_conntrack_untracked) {
|
||||
if (ct && !nf_ct_is_untracked(ct)) {
|
||||
if (!nf_ct_is_confirmed(ct))
|
||||
ret = __nf_conntrack_confirm(skb);
|
||||
if (likely(ret == NF_ACCEPT))
|
||||
|
||||
@@ -28,9 +28,14 @@ struct nf_ct_ext {
|
||||
char data[0];
|
||||
};
|
||||
|
||||
static inline int nf_ct_ext_exist(const struct nf_conn *ct, u8 id)
|
||||
static inline bool __nf_ct_ext_exist(const struct nf_ct_ext *ext, u8 id)
|
||||
{
|
||||
return (ct->ext && ct->ext->offset[id]);
|
||||
return !!ext->offset[id];
|
||||
}
|
||||
|
||||
static inline bool nf_ct_ext_exist(const struct nf_conn *ct, u8 id)
|
||||
{
|
||||
return (ct->ext && __nf_ct_ext_exist(ct->ext, id));
|
||||
}
|
||||
|
||||
static inline void *__nf_ct_ext_find(const struct nf_conn *ct, u8 id)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user