Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
This merges (3f509c6 netfilter: nf_nat_sip: fix incorrect handling
of EBUSY for RTCP expectation) to Patrick McHardy's IPv6 NAT changes.
This commit is contained in:
@@ -166,8 +166,6 @@ struct drm_display_mode {
|
||||
int crtc_vsync_start;
|
||||
int crtc_vsync_end;
|
||||
int crtc_vtotal;
|
||||
int crtc_hadjusted;
|
||||
int crtc_vadjusted;
|
||||
|
||||
/* Driver private mode info */
|
||||
int private_size;
|
||||
|
||||
@@ -515,6 +515,26 @@ struct bcma_pflash {
|
||||
u32 window_size;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_BCMA_SFLASH
|
||||
struct bcma_sflash {
|
||||
bool present;
|
||||
u32 window;
|
||||
u32 blocksize;
|
||||
u16 numblocks;
|
||||
u32 size;
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BCMA_NFLASH
|
||||
struct mtd_info;
|
||||
|
||||
struct bcma_nflash {
|
||||
bool present;
|
||||
|
||||
struct mtd_info *mtd;
|
||||
};
|
||||
#endif
|
||||
|
||||
struct bcma_serial_port {
|
||||
void *regs;
|
||||
unsigned long clockspeed;
|
||||
@@ -535,6 +555,12 @@ struct bcma_drv_cc {
|
||||
struct bcma_chipcommon_pmu pmu;
|
||||
#ifdef CONFIG_BCMA_DRIVER_MIPS
|
||||
struct bcma_pflash pflash;
|
||||
#ifdef CONFIG_BCMA_SFLASH
|
||||
struct bcma_sflash sflash;
|
||||
#endif
|
||||
#ifdef CONFIG_BCMA_NFLASH
|
||||
struct bcma_nflash nflash;
|
||||
#endif
|
||||
|
||||
int nr_serial_ports;
|
||||
struct bcma_serial_port serial_ports[4];
|
||||
|
||||
@@ -85,4 +85,6 @@
|
||||
* (2 ZettaBytes), high 32 bits
|
||||
*/
|
||||
|
||||
#define BCMA_SFLASH 0x1c000000
|
||||
|
||||
#endif /* LINUX_BCMA_REGS_H_ */
|
||||
|
||||
@@ -74,8 +74,6 @@ static inline struct vlan_ethhdr *vlan_eth_hdr(const struct sk_buff *skb)
|
||||
/* found in socket.c */
|
||||
extern void vlan_ioctl_set(int (*hook)(struct net *, void __user *));
|
||||
|
||||
struct vlan_info;
|
||||
|
||||
static inline int is_vlan_dev(struct net_device *dev)
|
||||
{
|
||||
return dev->priv_flags & IFF_802_1Q_VLAN;
|
||||
@@ -101,6 +99,8 @@ extern int vlan_vids_add_by_dev(struct net_device *dev,
|
||||
const struct net_device *by_dev);
|
||||
extern void vlan_vids_del_by_dev(struct net_device *dev,
|
||||
const struct net_device *by_dev);
|
||||
|
||||
extern bool vlan_uses_dev(const struct net_device *dev);
|
||||
#else
|
||||
static inline struct net_device *
|
||||
__vlan_find_dev_deep(struct net_device *real_dev, u16 vlan_id)
|
||||
@@ -151,6 +151,11 @@ static inline void vlan_vids_del_by_dev(struct net_device *dev,
|
||||
const struct net_device *by_dev)
|
||||
{
|
||||
}
|
||||
|
||||
static inline bool vlan_uses_dev(const struct net_device *dev)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
||||
@@ -159,6 +159,7 @@ struct inet_diag_handler {
|
||||
struct inet_connection_sock;
|
||||
int inet_sk_diag_fill(struct sock *sk, struct inet_connection_sock *icsk,
|
||||
struct sk_buff *skb, struct inet_diag_req_v2 *req,
|
||||
struct user_namespace *user_ns,
|
||||
u32 pid, u32 seq, u16 nlmsg_flags,
|
||||
const struct nlmsghdr *unlh);
|
||||
void inet_diag_dump_icsk(struct inet_hashinfo *h, struct sk_buff *skb,
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include <linux/bug.h>
|
||||
#include <linux/atomic.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/mutex.h>
|
||||
|
||||
struct kref {
|
||||
atomic_t refcount;
|
||||
@@ -93,4 +94,21 @@ static inline int kref_put(struct kref *kref, void (*release)(struct kref *kref)
|
||||
{
|
||||
return kref_sub(kref, 1, release);
|
||||
}
|
||||
|
||||
static inline int kref_put_mutex(struct kref *kref,
|
||||
void (*release)(struct kref *kref),
|
||||
struct mutex *lock)
|
||||
{
|
||||
WARN_ON(release == NULL);
|
||||
if (unlikely(!atomic_add_unless(&kref->refcount, -1, 1))) {
|
||||
mutex_lock(lock);
|
||||
if (unlikely(!atomic_dec_and_test(&kref->refcount))) {
|
||||
mutex_unlock(lock);
|
||||
return 0;
|
||||
}
|
||||
release(kref);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif /* _KREF_H_ */
|
||||
|
||||
@@ -2227,6 +2227,7 @@ static inline void dev_hold(struct net_device *dev)
|
||||
* kind of lower layer not just hardware media.
|
||||
*/
|
||||
|
||||
extern void linkwatch_init_dev(struct net_device *dev);
|
||||
extern void linkwatch_fire_event(struct net_device *dev);
|
||||
extern void linkwatch_forget_dev(struct net_device *dev);
|
||||
|
||||
|
||||
@@ -165,6 +165,7 @@ struct netlink_skb_parms {
|
||||
struct ucred creds; /* Skb credentials */
|
||||
__u32 pid;
|
||||
__u32 dst_group;
|
||||
struct sock *ssk;
|
||||
};
|
||||
|
||||
#define NETLINK_CB(skb) (*(struct netlink_skb_parms*)&((skb)->cb))
|
||||
|
||||
@@ -69,6 +69,7 @@ struct nfs_pageio_descriptor {
|
||||
const struct nfs_pgio_completion_ops *pg_completion_ops;
|
||||
struct pnfs_layout_segment *pg_lseg;
|
||||
struct nfs_direct_req *pg_dreq;
|
||||
void *pg_layout_private;
|
||||
};
|
||||
|
||||
#define NFS_WBACK_BUSY(req) (test_bit(PG_BUSY,&(req)->wb_flags))
|
||||
|
||||
@@ -1248,6 +1248,7 @@ struct nfs_pgio_header {
|
||||
void (*release) (struct nfs_pgio_header *hdr);
|
||||
const struct nfs_pgio_completion_ops *completion_ops;
|
||||
struct nfs_direct_req *dreq;
|
||||
void *layout_private;
|
||||
spinlock_t lock;
|
||||
/* fields protected by lock */
|
||||
int pnfs_error;
|
||||
|
||||
@@ -565,6 +565,14 @@
|
||||
* %NL80211_ATTR_IFINDEX is now on %NL80211_ATTR_WIPHY_FREQ with
|
||||
* %NL80211_ATTR_WIPHY_CHANNEL_TYPE.
|
||||
*
|
||||
* @NL80211_CMD_START_P2P_DEVICE: Start the given P2P Device, identified by
|
||||
* its %NL80211_ATTR_WDEV identifier. It must have been created with
|
||||
* %NL80211_CMD_NEW_INTERFACE previously. After it has been started, the
|
||||
* P2P Device can be used for P2P operations, e.g. remain-on-channel and
|
||||
* public action frame TX.
|
||||
* @NL80211_CMD_STOP_P2P_DEVICE: Stop the given P2P Device, identified by
|
||||
* its %NL80211_ATTR_WDEV identifier.
|
||||
*
|
||||
* @NL80211_CMD_MAX: highest used command number
|
||||
* @__NL80211_CMD_AFTER_LAST: internal use
|
||||
*/
|
||||
@@ -708,6 +716,9 @@ enum nl80211_commands {
|
||||
|
||||
NL80211_CMD_CH_SWITCH_NOTIFY,
|
||||
|
||||
NL80211_CMD_START_P2P_DEVICE,
|
||||
NL80211_CMD_STOP_P2P_DEVICE,
|
||||
|
||||
/* add new commands above here */
|
||||
|
||||
/* used to define NL80211_CMD_MAX below */
|
||||
@@ -1575,6 +1586,10 @@ enum nl80211_attrs {
|
||||
* @NL80211_IFTYPE_MESH_POINT: mesh point
|
||||
* @NL80211_IFTYPE_P2P_CLIENT: P2P client
|
||||
* @NL80211_IFTYPE_P2P_GO: P2P group owner
|
||||
* @NL80211_IFTYPE_P2P_DEVICE: P2P device interface type, this is not a netdev
|
||||
* and therefore can't be created in the normal ways, use the
|
||||
* %NL80211_CMD_START_P2P_DEVICE and %NL80211_CMD_STOP_P2P_DEVICE
|
||||
* commands to create and destroy one
|
||||
* @NL80211_IFTYPE_MAX: highest interface type number currently defined
|
||||
* @NUM_NL80211_IFTYPES: number of defined interface types
|
||||
*
|
||||
@@ -1593,6 +1608,7 @@ enum nl80211_iftype {
|
||||
NL80211_IFTYPE_MESH_POINT,
|
||||
NL80211_IFTYPE_P2P_CLIENT,
|
||||
NL80211_IFTYPE_P2P_GO,
|
||||
NL80211_IFTYPE_P2P_DEVICE,
|
||||
|
||||
/* keep last */
|
||||
NUM_NL80211_IFTYPES,
|
||||
@@ -2994,12 +3010,18 @@ enum nl80211_ap_sme_features {
|
||||
* @NL80211_FEATURE_CELL_BASE_REG_HINTS: This driver has been tested
|
||||
* to work properly to suppport receiving regulatory hints from
|
||||
* cellular base stations.
|
||||
* @NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL: If this is set, an active
|
||||
* P2P Device (%NL80211_IFTYPE_P2P_DEVICE) requires its own channel
|
||||
* in the interface combinations, even when it's only used for scan
|
||||
* and remain-on-channel. This could be due to, for example, the
|
||||
* remain-on-channel implementation requiring a channel context.
|
||||
*/
|
||||
enum nl80211_feature_flags {
|
||||
NL80211_FEATURE_SK_TX_STATUS = 1 << 0,
|
||||
NL80211_FEATURE_HT_IBSS = 1 << 1,
|
||||
NL80211_FEATURE_INACTIVITY_TIMER = 1 << 2,
|
||||
NL80211_FEATURE_CELL_BASE_REG_HINTS = 1 << 3,
|
||||
NL80211_FEATURE_SK_TX_STATUS = 1 << 0,
|
||||
NL80211_FEATURE_HT_IBSS = 1 << 1,
|
||||
NL80211_FEATURE_INACTIVITY_TIMER = 1 << 2,
|
||||
NL80211_FEATURE_CELL_BASE_REG_HINTS = 1 << 3,
|
||||
NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL = 1 << 4,
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include <linux/phy.h>
|
||||
#include <linux/of.h>
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
extern int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np);
|
||||
extern struct phy_device *of_phy_find_device(struct device_node *phy_np);
|
||||
extern struct phy_device *of_phy_connect(struct net_device *dev,
|
||||
@@ -24,4 +25,36 @@ extern struct phy_device *of_phy_connect_fixed_link(struct net_device *dev,
|
||||
|
||||
extern struct mii_bus *of_mdio_find_bus(struct device_node *mdio_np);
|
||||
|
||||
#else /* CONFIG_OF */
|
||||
int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
struct phy_device *of_phy_find_device(struct device_node *phy_np)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct phy_device *of_phy_connect(struct net_device *dev,
|
||||
struct device_node *phy_np,
|
||||
void (*hndlr)(struct net_device *),
|
||||
u32 flags, phy_interface_t iface)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct phy_device *of_phy_connect_fixed_link(struct net_device *dev,
|
||||
void (*hndlr)(struct net_device *),
|
||||
phy_interface_t iface)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct mii_bus *of_mdio_find_bus(struct device_node *mdio_np)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
#endif /* CONFIG_OF */
|
||||
|
||||
#endif /* __LINUX_OF_MDIO_H */
|
||||
|
||||
@@ -2149,7 +2149,7 @@
|
||||
#define PCI_DEVICE_ID_TIGON3_5704S 0x16a8
|
||||
#define PCI_DEVICE_ID_NX2_57800_VF 0x16a9
|
||||
#define PCI_DEVICE_ID_NX2_5706S 0x16aa
|
||||
#define PCI_DEVICE_ID_NX2_57840_MF 0x16ab
|
||||
#define PCI_DEVICE_ID_NX2_57840_MF 0x16a4
|
||||
#define PCI_DEVICE_ID_NX2_5708S 0x16ac
|
||||
#define PCI_DEVICE_ID_NX2_57840_VF 0x16ad
|
||||
#define PCI_DEVICE_ID_NX2_57810_MF 0x16ae
|
||||
|
||||
@@ -354,6 +354,37 @@ static inline bool rfkill_blocked(struct rfkill *rfkill)
|
||||
}
|
||||
#endif /* RFKILL || RFKILL_MODULE */
|
||||
|
||||
|
||||
#ifdef CONFIG_RFKILL_LEDS
|
||||
/**
|
||||
* rfkill_get_led_trigger_name - Get the LED trigger name for the button's LED.
|
||||
* This function might return a NULL pointer if registering of the
|
||||
* LED trigger failed. Use this as "default_trigger" for the LED.
|
||||
*/
|
||||
const char *rfkill_get_led_trigger_name(struct rfkill *rfkill);
|
||||
|
||||
/**
|
||||
* rfkill_set_led_trigger_name -- set the LED trigger name
|
||||
* @rfkill: rfkill struct
|
||||
* @name: LED trigger name
|
||||
*
|
||||
* This function sets the LED trigger name of the radio LED
|
||||
* trigger that rfkill creates. It is optional, but if called
|
||||
* must be called before rfkill_register() to be effective.
|
||||
*/
|
||||
void rfkill_set_led_trigger_name(struct rfkill *rfkill, const char *name);
|
||||
#else
|
||||
static inline const char *rfkill_get_led_trigger_name(struct rfkill *rfkill)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void
|
||||
rfkill_set_led_trigger_name(struct rfkill *rfkill, const char *name)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* RFKILL_H */
|
||||
|
||||
@@ -13,6 +13,7 @@ struct file;
|
||||
struct path;
|
||||
struct inode;
|
||||
struct dentry;
|
||||
struct user_namespace;
|
||||
|
||||
struct seq_file {
|
||||
char *buf;
|
||||
@@ -25,6 +26,9 @@ struct seq_file {
|
||||
struct mutex lock;
|
||||
const struct seq_operations *op;
|
||||
int poll_event;
|
||||
#ifdef CONFIG_USER_NS
|
||||
struct user_namespace *user_ns;
|
||||
#endif
|
||||
void *private;
|
||||
};
|
||||
|
||||
@@ -128,6 +132,16 @@ int seq_put_decimal_ull(struct seq_file *m, char delimiter,
|
||||
int seq_put_decimal_ll(struct seq_file *m, char delimiter,
|
||||
long long num);
|
||||
|
||||
static inline struct user_namespace *seq_user_ns(struct seq_file *seq)
|
||||
{
|
||||
#ifdef CONFIG_USER_NS
|
||||
return seq->user_ns;
|
||||
#else
|
||||
extern struct user_namespace init_user_ns;
|
||||
return &init_user_ns;
|
||||
#endif
|
||||
}
|
||||
|
||||
#define SEQ_START_TOKEN ((void *)1)
|
||||
/*
|
||||
* Helpers for iteration over list_head-s in seq_files
|
||||
|
||||
@@ -241,6 +241,10 @@ enum
|
||||
LINUX_MIB_TCPCHALLENGEACK, /* TCPChallengeACK */
|
||||
LINUX_MIB_TCPSYNCHALLENGE, /* TCPSYNChallenge */
|
||||
LINUX_MIB_TCPFASTOPENACTIVE, /* TCPFastOpenActive */
|
||||
LINUX_MIB_TCPFASTOPENPASSIVE, /* TCPFastOpenPassive*/
|
||||
LINUX_MIB_TCPFASTOPENPASSIVEFAIL, /* TCPFastOpenPassiveFail */
|
||||
LINUX_MIB_TCPFASTOPENLISTENOVERFLOW, /* TCPFastOpenListenOverflow */
|
||||
LINUX_MIB_TCPFASTOPENCOOKIEREQD, /* TCPFastOpenCookieReqd */
|
||||
__LINUX_MIB_MAX
|
||||
};
|
||||
|
||||
|
||||
@@ -76,7 +76,6 @@
|
||||
/* Platfrom data for platform device structure's platform_data field */
|
||||
|
||||
struct stmmac_mdio_bus_data {
|
||||
int bus_id;
|
||||
int (*phy_reset)(void *priv);
|
||||
unsigned int phy_mask;
|
||||
int *irqs;
|
||||
|
||||
@@ -110,6 +110,7 @@ enum {
|
||||
#define TCP_REPAIR_QUEUE 20
|
||||
#define TCP_QUEUE_SEQ 21
|
||||
#define TCP_REPAIR_OPTIONS 22
|
||||
#define TCP_FASTOPEN 23 /* Enable FastOpen on listeners */
|
||||
|
||||
struct tcp_repair_opt {
|
||||
__u32 opt_code;
|
||||
@@ -246,6 +247,7 @@ static inline unsigned int tcp_optlen(const struct sk_buff *skb)
|
||||
/* TCP Fast Open */
|
||||
#define TCP_FASTOPEN_COOKIE_MIN 4 /* Min Fast Open Cookie size in bytes */
|
||||
#define TCP_FASTOPEN_COOKIE_MAX 16 /* Max Fast Open Cookie size in bytes */
|
||||
#define TCP_FASTOPEN_COOKIE_SIZE 8 /* the size employed by this impl. */
|
||||
|
||||
/* TCP Fast Open Cookie as stored in memory */
|
||||
struct tcp_fastopen_cookie {
|
||||
@@ -312,9 +314,14 @@ struct tcp_request_sock {
|
||||
/* Only used by TCP MD5 Signature so far. */
|
||||
const struct tcp_request_sock_ops *af_specific;
|
||||
#endif
|
||||
struct sock *listener; /* needed for TFO */
|
||||
u32 rcv_isn;
|
||||
u32 snt_isn;
|
||||
u32 snt_synack; /* synack sent time */
|
||||
u32 rcv_nxt; /* the ack # by SYNACK. For
|
||||
* FastOpen it's the seq#
|
||||
* after data-in-SYN.
|
||||
*/
|
||||
};
|
||||
|
||||
static inline struct tcp_request_sock *tcp_rsk(const struct request_sock *req)
|
||||
@@ -505,14 +512,18 @@ struct tcp_sock {
|
||||
struct tcp_md5sig_info __rcu *md5sig_info;
|
||||
#endif
|
||||
|
||||
/* TCP fastopen related information */
|
||||
struct tcp_fastopen_request *fastopen_req;
|
||||
|
||||
/* When the cookie options are generated and exchanged, then this
|
||||
* object holds a reference to them (cookie_values->kref). Also
|
||||
* contains related tcp_cookie_transactions fields.
|
||||
*/
|
||||
struct tcp_cookie_values *cookie_values;
|
||||
|
||||
/* TCP fastopen related information */
|
||||
struct tcp_fastopen_request *fastopen_req;
|
||||
/* fastopen_rsk points to request_sock that resulted in this big
|
||||
* socket. Used to retransmit SYNACKs etc.
|
||||
*/
|
||||
struct request_sock *fastopen_rsk;
|
||||
};
|
||||
|
||||
enum tsq_flags {
|
||||
@@ -552,6 +563,34 @@ static inline struct tcp_timewait_sock *tcp_twsk(const struct sock *sk)
|
||||
return (struct tcp_timewait_sock *)sk;
|
||||
}
|
||||
|
||||
static inline bool tcp_passive_fastopen(const struct sock *sk)
|
||||
{
|
||||
return (sk->sk_state == TCP_SYN_RECV &&
|
||||
tcp_sk(sk)->fastopen_rsk != NULL);
|
||||
}
|
||||
|
||||
static inline bool fastopen_cookie_present(struct tcp_fastopen_cookie *foc)
|
||||
{
|
||||
return foc->len != -1;
|
||||
}
|
||||
|
||||
static inline int fastopen_init_queue(struct sock *sk, int backlog)
|
||||
{
|
||||
struct request_sock_queue *queue =
|
||||
&inet_csk(sk)->icsk_accept_queue;
|
||||
|
||||
if (queue->fastopenq == NULL) {
|
||||
queue->fastopenq = kzalloc(
|
||||
sizeof(struct fastopen_queue),
|
||||
sk->sk_allocation);
|
||||
if (queue->fastopenq == NULL)
|
||||
return -ENOMEM;
|
||||
spin_lock_init(&queue->fastopenq->lock);
|
||||
}
|
||||
queue->fastopenq->max_qlen = backlog;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _LINUX_TCP_H */
|
||||
|
||||
@@ -157,7 +157,7 @@ enum {
|
||||
typedef struct ax25_uid_assoc {
|
||||
struct hlist_node uid_node;
|
||||
atomic_t refcount;
|
||||
uid_t uid;
|
||||
kuid_t uid;
|
||||
ax25_address call;
|
||||
} ax25_uid_assoc;
|
||||
|
||||
@@ -434,7 +434,7 @@ extern unsigned long ax25_display_timer(struct timer_list *);
|
||||
|
||||
/* ax25_uid.c */
|
||||
extern int ax25_uid_policy;
|
||||
extern ax25_uid_assoc *ax25_findbyuid(uid_t);
|
||||
extern ax25_uid_assoc *ax25_findbyuid(kuid_t);
|
||||
extern int __must_check ax25_uid_ioctl(int, struct sockaddr_ax25 *);
|
||||
extern const struct file_operations ax25_uid_fops;
|
||||
extern void ax25_uid_free(void);
|
||||
|
||||
@@ -1439,7 +1439,8 @@ struct cfg80211_gtk_rekey_data {
|
||||
* @add_virtual_intf: create a new virtual interface with the given name,
|
||||
* must set the struct wireless_dev's iftype. Beware: You must create
|
||||
* the new netdev in the wiphy's network namespace! Returns the struct
|
||||
* wireless_dev, or an ERR_PTR.
|
||||
* wireless_dev, or an ERR_PTR. For P2P device wdevs, the driver must
|
||||
* also set the address member in the wdev.
|
||||
*
|
||||
* @del_virtual_intf: remove the virtual interface
|
||||
*
|
||||
@@ -1618,6 +1619,9 @@ struct cfg80211_gtk_rekey_data {
|
||||
* @get_channel: Get the current operating channel for the virtual interface.
|
||||
* For monitor interfaces, it should return %NULL unless there's a single
|
||||
* current monitoring channel.
|
||||
*
|
||||
* @start_p2p_device: Start the given P2P device.
|
||||
* @stop_p2p_device: Stop the given P2P device.
|
||||
*/
|
||||
struct cfg80211_ops {
|
||||
int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow);
|
||||
@@ -1834,6 +1838,11 @@ struct cfg80211_ops {
|
||||
(*get_channel)(struct wiphy *wiphy,
|
||||
struct wireless_dev *wdev,
|
||||
enum nl80211_channel_type *type);
|
||||
|
||||
int (*start_p2p_device)(struct wiphy *wiphy,
|
||||
struct wireless_dev *wdev);
|
||||
void (*stop_p2p_device)(struct wiphy *wiphy,
|
||||
struct wireless_dev *wdev);
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -2397,6 +2406,8 @@ struct cfg80211_cached_keys;
|
||||
* @cleanup_work: work struct used for cleanup that can't be done directly
|
||||
* @beacon_interval: beacon interval used on this device for transmitting
|
||||
* beacons, 0 when not valid
|
||||
* @address: The address for this device, valid only if @netdev is %NULL
|
||||
* @p2p_started: true if this is a P2P Device that has been started
|
||||
*/
|
||||
struct wireless_dev {
|
||||
struct wiphy *wiphy;
|
||||
@@ -2415,7 +2426,9 @@ struct wireless_dev {
|
||||
|
||||
struct work_struct cleanup_work;
|
||||
|
||||
bool use_4addr;
|
||||
bool use_4addr, p2p_started;
|
||||
|
||||
u8 address[ETH_ALEN] __aligned(sizeof(u16));
|
||||
|
||||
/* currently used for IBSS and SME - might be rearranged later */
|
||||
u8 ssid[IEEE80211_MAX_SSID_LEN];
|
||||
@@ -2463,6 +2476,13 @@ struct wireless_dev {
|
||||
#endif
|
||||
};
|
||||
|
||||
static inline u8 *wdev_address(struct wireless_dev *wdev)
|
||||
{
|
||||
if (wdev->netdev)
|
||||
return wdev->netdev->dev_addr;
|
||||
return wdev->address;
|
||||
}
|
||||
|
||||
/**
|
||||
* wdev_priv - return wiphy priv from wireless_dev
|
||||
*
|
||||
@@ -3530,6 +3550,22 @@ void cfg80211_ch_switch_notify(struct net_device *dev, int freq,
|
||||
*/
|
||||
u32 cfg80211_calculate_bitrate(struct rate_info *rate);
|
||||
|
||||
/**
|
||||
* cfg80211_unregister_wdev - remove the given wdev
|
||||
* @wdev: struct wireless_dev to remove
|
||||
*
|
||||
* Call this function only for wdevs that have no netdev assigned,
|
||||
* e.g. P2P Devices. It removes the device from the list so that
|
||||
* it can no longer be used. It is necessary to call this function
|
||||
* even when cfg80211 requests the removal of the interface by
|
||||
* calling the del_virtual_intf() callback. The function must also
|
||||
* be called when the driver wishes to unregister the wdev, e.g.
|
||||
* when the device is unbound from the driver.
|
||||
*
|
||||
* Requires the RTNL to be held.
|
||||
*/
|
||||
void cfg80211_unregister_wdev(struct wireless_dev *wdev);
|
||||
|
||||
/* Logging, debugging and troubleshooting/diagnostic helpers. */
|
||||
|
||||
/* wiphy_printk helpers, similar to dev_printk */
|
||||
|
||||
@@ -183,6 +183,9 @@ struct ieee80211_radiotap_header {
|
||||
* Contains a bitmap of known fields/flags, the flags, and
|
||||
* the MCS index.
|
||||
*
|
||||
* IEEE80211_RADIOTAP_AMPDU_STATUS u32, u16, u8, u8 unitless
|
||||
*
|
||||
* Contains the AMPDU information for the subframe.
|
||||
*/
|
||||
enum ieee80211_radiotap_type {
|
||||
IEEE80211_RADIOTAP_TSFT = 0,
|
||||
@@ -205,6 +208,7 @@ enum ieee80211_radiotap_type {
|
||||
IEEE80211_RADIOTAP_DATA_RETRIES = 17,
|
||||
|
||||
IEEE80211_RADIOTAP_MCS = 19,
|
||||
IEEE80211_RADIOTAP_AMPDU_STATUS = 20,
|
||||
|
||||
/* valid in every it_present bitmap, even vendor namespaces */
|
||||
IEEE80211_RADIOTAP_RADIOTAP_NAMESPACE = 29,
|
||||
@@ -270,6 +274,13 @@ enum ieee80211_radiotap_type {
|
||||
#define IEEE80211_RADIOTAP_MCS_FMT_GF 0x08
|
||||
#define IEEE80211_RADIOTAP_MCS_FEC_LDPC 0x10
|
||||
|
||||
/* For IEEE80211_RADIOTAP_AMPDU_STATUS */
|
||||
#define IEEE80211_RADIOTAP_AMPDU_REPORT_ZEROLEN 0x0001
|
||||
#define IEEE80211_RADIOTAP_AMPDU_IS_ZEROLEN 0x0002
|
||||
#define IEEE80211_RADIOTAP_AMPDU_LAST_KNOWN 0x0004
|
||||
#define IEEE80211_RADIOTAP_AMPDU_IS_LAST 0x0008
|
||||
#define IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_ERR 0x0010
|
||||
#define IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_KNOWN 0x0020
|
||||
|
||||
/* helpers */
|
||||
static inline int ieee80211_get_radiotap_len(unsigned char *data)
|
||||
|
||||
@@ -223,7 +223,10 @@ struct ip6_flowlabel {
|
||||
struct ipv6_txoptions *opt;
|
||||
unsigned long linger;
|
||||
u8 share;
|
||||
u32 owner;
|
||||
union {
|
||||
struct pid *pid;
|
||||
kuid_t uid;
|
||||
} owner;
|
||||
unsigned long lastuse;
|
||||
unsigned long expires;
|
||||
struct net *fl_net;
|
||||
|
||||
@@ -171,6 +171,7 @@ struct ieee80211_low_level_stats {
|
||||
* @BSS_CHANGED_IDLE: Idle changed for this BSS/interface.
|
||||
* @BSS_CHANGED_SSID: SSID changed for this BSS (AP mode)
|
||||
* @BSS_CHANGED_AP_PROBE_RESP: Probe Response changed for this BSS (AP mode)
|
||||
* @BSS_CHANGED_PS: PS changed for this BSS (STA mode)
|
||||
*/
|
||||
enum ieee80211_bss_change {
|
||||
BSS_CHANGED_ASSOC = 1<<0,
|
||||
@@ -190,6 +191,7 @@ enum ieee80211_bss_change {
|
||||
BSS_CHANGED_IDLE = 1<<14,
|
||||
BSS_CHANGED_SSID = 1<<15,
|
||||
BSS_CHANGED_AP_PROBE_RESP = 1<<16,
|
||||
BSS_CHANGED_PS = 1<<17,
|
||||
|
||||
/* when adding here, make sure to change ieee80211_reconfig */
|
||||
};
|
||||
@@ -266,6 +268,8 @@ enum ieee80211_rssi_event {
|
||||
* @idle: This interface is idle. There's also a global idle flag in the
|
||||
* hardware config which may be more appropriate depending on what
|
||||
* your driver/device needs to do.
|
||||
* @ps: power-save mode (STA only). This flag is NOT affected by
|
||||
* offchannel/dynamic_ps operations.
|
||||
* @ssid: The SSID of the current vif. Only valid in AP-mode.
|
||||
* @ssid_len: Length of SSID given in @ssid.
|
||||
* @hidden_ssid: The SSID of the current vif is hidden. Only valid in AP-mode.
|
||||
@@ -296,6 +300,7 @@ struct ieee80211_bss_conf {
|
||||
bool arp_filter_enabled;
|
||||
bool qos;
|
||||
bool idle;
|
||||
bool ps;
|
||||
u8 ssid[IEEE80211_MAX_SSID_LEN];
|
||||
size_t ssid_len;
|
||||
bool hidden_ssid;
|
||||
@@ -522,9 +527,6 @@ struct ieee80211_tx_rate {
|
||||
* (2) driver internal use (if applicable)
|
||||
* (3) TX status information - driver tells mac80211 what happened
|
||||
*
|
||||
* The TX control's sta pointer is only valid during the ->tx call,
|
||||
* it may be NULL.
|
||||
*
|
||||
* @flags: transmit info flags, defined above
|
||||
* @band: the band to transmit on (use for checking for races)
|
||||
* @hw_queue: HW queue to put the frame on, skb_get_queue_mapping() gives the AC
|
||||
@@ -555,6 +557,7 @@ struct ieee80211_tx_info {
|
||||
struct ieee80211_tx_rate rates[
|
||||
IEEE80211_TX_MAX_RATES];
|
||||
s8 rts_cts_rate_idx;
|
||||
/* 3 bytes free */
|
||||
};
|
||||
/* only needed before rate control */
|
||||
unsigned long jiffies;
|
||||
@@ -562,7 +565,7 @@ struct ieee80211_tx_info {
|
||||
/* NB: vif can be NULL for injected frames */
|
||||
struct ieee80211_vif *vif;
|
||||
struct ieee80211_key_conf *hw_key;
|
||||
struct ieee80211_sta *sta;
|
||||
/* 8 bytes free */
|
||||
} control;
|
||||
struct {
|
||||
struct ieee80211_tx_rate rates[IEEE80211_TX_MAX_RATES];
|
||||
@@ -673,21 +676,41 @@ ieee80211_tx_info_clear_status(struct ieee80211_tx_info *info)
|
||||
* @RX_FLAG_HT_GF: This frame was received in a HT-greenfield transmission, if
|
||||
* the driver fills this value it should add %IEEE80211_RADIOTAP_MCS_HAVE_FMT
|
||||
* to hw.radiotap_mcs_details to advertise that fact
|
||||
* @RX_FLAG_AMPDU_DETAILS: A-MPDU details are known, in particular the reference
|
||||
* number (@ampdu_reference) must be populated and be a distinct number for
|
||||
* each A-MPDU
|
||||
* @RX_FLAG_AMPDU_REPORT_ZEROLEN: driver reports 0-length subframes
|
||||
* @RX_FLAG_AMPDU_IS_ZEROLEN: This is a zero-length subframe, for
|
||||
* monitoring purposes only
|
||||
* @RX_FLAG_AMPDU_LAST_KNOWN: last subframe is known, should be set on all
|
||||
* subframes of a single A-MPDU
|
||||
* @RX_FLAG_AMPDU_IS_LAST: this subframe is the last subframe of the A-MPDU
|
||||
* @RX_FLAG_AMPDU_DELIM_CRC_ERROR: A delimiter CRC error has been detected
|
||||
* on this subframe
|
||||
* @RX_FLAG_AMPDU_DELIM_CRC_KNOWN: The delimiter CRC field is known (the CRC
|
||||
* is stored in the @ampdu_delimiter_crc field)
|
||||
*/
|
||||
enum mac80211_rx_flags {
|
||||
RX_FLAG_MMIC_ERROR = 1<<0,
|
||||
RX_FLAG_DECRYPTED = 1<<1,
|
||||
RX_FLAG_MMIC_STRIPPED = 1<<3,
|
||||
RX_FLAG_IV_STRIPPED = 1<<4,
|
||||
RX_FLAG_FAILED_FCS_CRC = 1<<5,
|
||||
RX_FLAG_FAILED_PLCP_CRC = 1<<6,
|
||||
RX_FLAG_MACTIME_MPDU = 1<<7,
|
||||
RX_FLAG_SHORTPRE = 1<<8,
|
||||
RX_FLAG_HT = 1<<9,
|
||||
RX_FLAG_40MHZ = 1<<10,
|
||||
RX_FLAG_SHORT_GI = 1<<11,
|
||||
RX_FLAG_NO_SIGNAL_VAL = 1<<12,
|
||||
RX_FLAG_HT_GF = 1<<13,
|
||||
RX_FLAG_MMIC_ERROR = BIT(0),
|
||||
RX_FLAG_DECRYPTED = BIT(1),
|
||||
RX_FLAG_MMIC_STRIPPED = BIT(3),
|
||||
RX_FLAG_IV_STRIPPED = BIT(4),
|
||||
RX_FLAG_FAILED_FCS_CRC = BIT(5),
|
||||
RX_FLAG_FAILED_PLCP_CRC = BIT(6),
|
||||
RX_FLAG_MACTIME_MPDU = BIT(7),
|
||||
RX_FLAG_SHORTPRE = BIT(8),
|
||||
RX_FLAG_HT = BIT(9),
|
||||
RX_FLAG_40MHZ = BIT(10),
|
||||
RX_FLAG_SHORT_GI = BIT(11),
|
||||
RX_FLAG_NO_SIGNAL_VAL = BIT(12),
|
||||
RX_FLAG_HT_GF = BIT(13),
|
||||
RX_FLAG_AMPDU_DETAILS = BIT(14),
|
||||
RX_FLAG_AMPDU_REPORT_ZEROLEN = BIT(15),
|
||||
RX_FLAG_AMPDU_IS_ZEROLEN = BIT(16),
|
||||
RX_FLAG_AMPDU_LAST_KNOWN = BIT(17),
|
||||
RX_FLAG_AMPDU_IS_LAST = BIT(18),
|
||||
RX_FLAG_AMPDU_DELIM_CRC_ERROR = BIT(19),
|
||||
RX_FLAG_AMPDU_DELIM_CRC_KNOWN = BIT(20),
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -711,17 +734,22 @@ enum mac80211_rx_flags {
|
||||
* HT rates are use (RX_FLAG_HT)
|
||||
* @flag: %RX_FLAG_*
|
||||
* @rx_flags: internal RX flags for mac80211
|
||||
* @ampdu_reference: A-MPDU reference number, must be a different value for
|
||||
* each A-MPDU but the same for each subframe within one A-MPDU
|
||||
* @ampdu_delimiter_crc: A-MPDU delimiter CRC
|
||||
*/
|
||||
struct ieee80211_rx_status {
|
||||
u64 mactime;
|
||||
u32 device_timestamp;
|
||||
u16 flag;
|
||||
u32 ampdu_reference;
|
||||
u32 flag;
|
||||
u16 freq;
|
||||
u8 rate_idx;
|
||||
u8 rx_flags;
|
||||
u8 band;
|
||||
u8 antenna;
|
||||
s8 signal;
|
||||
u8 ampdu_delimiter_crc;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -1073,6 +1101,16 @@ enum sta_notify_cmd {
|
||||
STA_NOTIFY_SLEEP, STA_NOTIFY_AWAKE,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ieee80211_tx_control - TX control data
|
||||
*
|
||||
* @sta: station table entry, this sta pointer may be NULL and
|
||||
* it is not allowed to copy the pointer, due to RCU.
|
||||
*/
|
||||
struct ieee80211_tx_control {
|
||||
struct ieee80211_sta *sta;
|
||||
};
|
||||
|
||||
/**
|
||||
* enum ieee80211_hw_flags - hardware flags
|
||||
*
|
||||
@@ -1203,6 +1241,10 @@ enum sta_notify_cmd {
|
||||
* queue mapping in order to use different queues (not just one per AC)
|
||||
* for different virtual interfaces. See the doc section on HW queue
|
||||
* control for more details.
|
||||
*
|
||||
* @IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF: Use the P2P Device address for any
|
||||
* P2P Interface. This will be honoured even if more than one interface
|
||||
* is supported.
|
||||
*/
|
||||
enum ieee80211_hw_flags {
|
||||
IEEE80211_HW_HAS_RATE_CONTROL = 1<<0,
|
||||
@@ -1230,6 +1272,7 @@ enum ieee80211_hw_flags {
|
||||
IEEE80211_HW_AP_LINK_PS = 1<<22,
|
||||
IEEE80211_HW_TX_AMPDU_SETUP_IN_HW = 1<<23,
|
||||
IEEE80211_HW_SCAN_WHILE_IDLE = 1<<24,
|
||||
IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF = 1<<25,
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -1884,10 +1927,14 @@ enum ieee80211_frame_release_type {
|
||||
* @IEEE80211_RC_BW_CHANGED: The bandwidth that can be used to transmit
|
||||
* to this station changed.
|
||||
* @IEEE80211_RC_SMPS_CHANGED: The SMPS state of the station changed.
|
||||
* @IEEE80211_RC_SUPP_RATES_CHANGED: The supported rate set of this peer
|
||||
* changed (in IBSS mode) due to discovering more information about
|
||||
* the peer.
|
||||
*/
|
||||
enum ieee80211_rate_control_changed {
|
||||
IEEE80211_RC_BW_CHANGED = BIT(0),
|
||||
IEEE80211_RC_SMPS_CHANGED = BIT(1),
|
||||
IEEE80211_RC_SUPP_RATES_CHANGED = BIT(2),
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -2264,7 +2311,9 @@ enum ieee80211_rate_control_changed {
|
||||
* The callback is optional and can (should!) sleep.
|
||||
*/
|
||||
struct ieee80211_ops {
|
||||
void (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb);
|
||||
void (*tx)(struct ieee80211_hw *hw,
|
||||
struct ieee80211_tx_control *control,
|
||||
struct sk_buff *skb);
|
||||
int (*start)(struct ieee80211_hw *hw);
|
||||
void (*stop)(struct ieee80211_hw *hw);
|
||||
#ifdef CONFIG_PM
|
||||
|
||||
@@ -18,6 +18,7 @@ struct nf_conntrack_ecache {
|
||||
u16 ctmask; /* bitmask of ct events to be delivered */
|
||||
u16 expmask; /* bitmask of expect events to be delivered */
|
||||
u32 pid; /* netlink pid of destroyer */
|
||||
struct timer_list timeout;
|
||||
};
|
||||
|
||||
static inline struct nf_conntrack_ecache *
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#ifndef __NETNS_IPV4_H__
|
||||
#define __NETNS_IPV4_H__
|
||||
|
||||
#include <linux/uidgid.h>
|
||||
#include <net/inet_frag.h>
|
||||
|
||||
struct tcpm_hash_bucket;
|
||||
@@ -60,7 +61,7 @@ struct netns_ipv4 {
|
||||
int sysctl_icmp_ratemask;
|
||||
int sysctl_icmp_errors_use_inbound_ifaddr;
|
||||
|
||||
unsigned int sysctl_ping_group_range[2];
|
||||
kgid_t sysctl_ping_group_range[2];
|
||||
long sysctl_tcp_mem[3];
|
||||
|
||||
atomic_t rt_genid;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#define __NETNS_PACKET_H__
|
||||
|
||||
#include <linux/rculist.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/mutex.h>
|
||||
|
||||
struct netns_packet {
|
||||
struct mutex sklist_lock;
|
||||
|
||||
@@ -106,6 +106,34 @@ struct listen_sock {
|
||||
struct request_sock *syn_table[0];
|
||||
};
|
||||
|
||||
/*
|
||||
* For a TCP Fast Open listener -
|
||||
* lock - protects the access to all the reqsk, which is co-owned by
|
||||
* the listener and the child socket.
|
||||
* qlen - pending TFO requests (still in TCP_SYN_RECV).
|
||||
* max_qlen - max TFO reqs allowed before TFO is disabled.
|
||||
*
|
||||
* XXX (TFO) - ideally these fields can be made as part of "listen_sock"
|
||||
* structure above. But there is some implementation difficulty due to
|
||||
* listen_sock being part of request_sock_queue hence will be freed when
|
||||
* a listener is stopped. But TFO related fields may continue to be
|
||||
* accessed even after a listener is closed, until its sk_refcnt drops
|
||||
* to 0 implying no more outstanding TFO reqs. One solution is to keep
|
||||
* listen_opt around until sk_refcnt drops to 0. But there is some other
|
||||
* complexity that needs to be resolved. E.g., a listener can be disabled
|
||||
* temporarily through shutdown()->tcp_disconnect(), and re-enabled later.
|
||||
*/
|
||||
struct fastopen_queue {
|
||||
struct request_sock *rskq_rst_head; /* Keep track of past TFO */
|
||||
struct request_sock *rskq_rst_tail; /* requests that caused RST.
|
||||
* This is part of the defense
|
||||
* against spoofing attack.
|
||||
*/
|
||||
spinlock_t lock;
|
||||
int qlen; /* # of pending (TCP_SYN_RECV) reqs */
|
||||
int max_qlen; /* != 0 iff TFO is currently enabled */
|
||||
};
|
||||
|
||||
/** struct request_sock_queue - queue of request_socks
|
||||
*
|
||||
* @rskq_accept_head - FIFO head of established children
|
||||
@@ -129,6 +157,12 @@ struct request_sock_queue {
|
||||
u8 rskq_defer_accept;
|
||||
/* 3 bytes hole, try to pack */
|
||||
struct listen_sock *listen_opt;
|
||||
struct fastopen_queue *fastopenq; /* This is non-NULL iff TFO has been
|
||||
* enabled on this listener. Check
|
||||
* max_qlen != 0 in fastopen_queue
|
||||
* to determine if TFO is enabled
|
||||
* right at this moment.
|
||||
*/
|
||||
};
|
||||
|
||||
extern int reqsk_queue_alloc(struct request_sock_queue *queue,
|
||||
@@ -136,6 +170,8 @@ extern int reqsk_queue_alloc(struct request_sock_queue *queue,
|
||||
|
||||
extern void __reqsk_queue_destroy(struct request_sock_queue *queue);
|
||||
extern void reqsk_queue_destroy(struct request_sock_queue *queue);
|
||||
extern void reqsk_fastopen_remove(struct sock *sk,
|
||||
struct request_sock *req, bool reset);
|
||||
|
||||
static inline struct request_sock *
|
||||
reqsk_queue_yank_acceptq(struct request_sock_queue *queue)
|
||||
@@ -190,19 +226,6 @@ static inline struct request_sock *reqsk_queue_remove(struct request_sock_queue
|
||||
return req;
|
||||
}
|
||||
|
||||
static inline struct sock *reqsk_queue_get_child(struct request_sock_queue *queue,
|
||||
struct sock *parent)
|
||||
{
|
||||
struct request_sock *req = reqsk_queue_remove(queue);
|
||||
struct sock *child = req->sk;
|
||||
|
||||
WARN_ON(child == NULL);
|
||||
|
||||
sk_acceptq_removed(parent);
|
||||
__reqsk_free(req);
|
||||
return child;
|
||||
}
|
||||
|
||||
static inline int reqsk_queue_removed(struct request_sock_queue *queue,
|
||||
struct request_sock *req)
|
||||
{
|
||||
|
||||
@@ -188,7 +188,8 @@ struct tcf_proto_ops {
|
||||
|
||||
unsigned long (*get)(struct tcf_proto*, u32 handle);
|
||||
void (*put)(struct tcf_proto*, unsigned long);
|
||||
int (*change)(struct tcf_proto*, unsigned long,
|
||||
int (*change)(struct sk_buff *,
|
||||
struct tcf_proto*, unsigned long,
|
||||
u32 handle, struct nlattr **,
|
||||
unsigned long *);
|
||||
int (*delete)(struct tcf_proto*, unsigned long);
|
||||
|
||||
@@ -606,6 +606,15 @@ static inline void sk_add_bind_node(struct sock *sk,
|
||||
#define sk_for_each_bound(__sk, node, list) \
|
||||
hlist_for_each_entry(__sk, node, list, sk_bind_node)
|
||||
|
||||
static inline struct user_namespace *sk_user_ns(struct sock *sk)
|
||||
{
|
||||
/* Careful only use this in a context where these parameters
|
||||
* can not change and must all be valid, such as recvmsg from
|
||||
* userspace.
|
||||
*/
|
||||
return sk->sk_socket->file->f_cred->user_ns;
|
||||
}
|
||||
|
||||
/* Sock flags */
|
||||
enum sock_flags {
|
||||
SOCK_DEAD,
|
||||
@@ -1670,7 +1679,7 @@ static inline void sock_graft(struct sock *sk, struct socket *parent)
|
||||
write_unlock_bh(&sk->sk_callback_lock);
|
||||
}
|
||||
|
||||
extern int sock_i_uid(struct sock *sk);
|
||||
extern kuid_t sock_i_uid(struct sock *sk);
|
||||
extern unsigned long sock_i_ino(struct sock *sk);
|
||||
|
||||
static inline struct dst_entry *
|
||||
|
||||
@@ -98,11 +98,21 @@ extern void tcp_time_wait(struct sock *sk, int state, int timeo);
|
||||
* 15 is ~13-30min depending on RTO.
|
||||
*/
|
||||
|
||||
#define TCP_SYN_RETRIES 5 /* number of times to retry active opening a
|
||||
* connection: ~180sec is RFC minimum */
|
||||
#define TCP_SYN_RETRIES 6 /* This is how many retries are done
|
||||
* when active opening a connection.
|
||||
* RFC1122 says the minimum retry MUST
|
||||
* be at least 180secs. Nevertheless
|
||||
* this value is corresponding to
|
||||
* 63secs of retransmission with the
|
||||
* current initial RTO.
|
||||
*/
|
||||
|
||||
#define TCP_SYNACK_RETRIES 5 /* number of times to retry passive opening a
|
||||
* connection: ~180sec is RFC minimum */
|
||||
#define TCP_SYNACK_RETRIES 5 /* This is how may retries are done
|
||||
* when passive opening a connection.
|
||||
* This is corresponding to 31secs of
|
||||
* retransmission with the current
|
||||
* initial RTO.
|
||||
*/
|
||||
|
||||
#define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to destroy TIME-WAIT
|
||||
* state, about 60 seconds */
|
||||
@@ -214,8 +224,24 @@ extern void tcp_time_wait(struct sock *sk, int state, int timeo);
|
||||
|
||||
/* Bit Flags for sysctl_tcp_fastopen */
|
||||
#define TFO_CLIENT_ENABLE 1
|
||||
#define TFO_SERVER_ENABLE 2
|
||||
#define TFO_CLIENT_NO_COOKIE 4 /* Data in SYN w/o cookie option */
|
||||
|
||||
/* Process SYN data but skip cookie validation */
|
||||
#define TFO_SERVER_COOKIE_NOT_CHKED 0x100
|
||||
/* Accept SYN data w/o any cookie option */
|
||||
#define TFO_SERVER_COOKIE_NOT_REQD 0x200
|
||||
|
||||
/* Force enable TFO on all listeners, i.e., not requiring the
|
||||
* TCP_FASTOPEN socket option. SOCKOPT1/2 determine how to set max_qlen.
|
||||
*/
|
||||
#define TFO_SERVER_WO_SOCKOPT1 0x400
|
||||
#define TFO_SERVER_WO_SOCKOPT2 0x800
|
||||
/* Always create TFO child sockets on a TFO listener even when
|
||||
* cookie/data not present. (For testing purpose!)
|
||||
*/
|
||||
#define TFO_SERVER_ALWAYS 0x1000
|
||||
|
||||
extern struct inet_timewait_death_row tcp_death_row;
|
||||
|
||||
/* sysctl variables for tcp */
|
||||
@@ -398,7 +424,8 @@ extern enum tcp_tw_status tcp_timewait_state_process(struct inet_timewait_sock *
|
||||
const struct tcphdr *th);
|
||||
extern struct sock * tcp_check_req(struct sock *sk,struct sk_buff *skb,
|
||||
struct request_sock *req,
|
||||
struct request_sock **prev);
|
||||
struct request_sock **prev,
|
||||
bool fastopen);
|
||||
extern int tcp_child_process(struct sock *parent, struct sock *child,
|
||||
struct sk_buff *skb);
|
||||
extern bool tcp_use_frto(struct sock *sk);
|
||||
@@ -411,12 +438,6 @@ extern void tcp_metrics_init(void);
|
||||
extern bool tcp_peer_is_proven(struct request_sock *req, struct dst_entry *dst, bool paws_check);
|
||||
extern bool tcp_remember_stamp(struct sock *sk);
|
||||
extern bool tcp_tw_remember_stamp(struct inet_timewait_sock *tw);
|
||||
extern void tcp_fastopen_cache_get(struct sock *sk, u16 *mss,
|
||||
struct tcp_fastopen_cookie *cookie,
|
||||
int *syn_loss, unsigned long *last_syn_loss);
|
||||
extern void tcp_fastopen_cache_set(struct sock *sk, u16 mss,
|
||||
struct tcp_fastopen_cookie *cookie,
|
||||
bool syn_lost);
|
||||
extern void tcp_fetch_timewait_stamp(struct sock *sk, struct dst_entry *dst);
|
||||
extern void tcp_disable_fack(struct tcp_sock *tp);
|
||||
extern void tcp_close(struct sock *sk, long timeout);
|
||||
@@ -458,7 +479,8 @@ extern int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr,
|
||||
extern int tcp_connect(struct sock *sk);
|
||||
extern struct sk_buff * tcp_make_synack(struct sock *sk, struct dst_entry *dst,
|
||||
struct request_sock *req,
|
||||
struct request_values *rvp);
|
||||
struct request_values *rvp,
|
||||
struct tcp_fastopen_cookie *foc);
|
||||
extern int tcp_disconnect(struct sock *sk, int flags);
|
||||
|
||||
void tcp_connect_init(struct sock *sk);
|
||||
@@ -527,6 +549,7 @@ extern void tcp_send_delayed_ack(struct sock *sk);
|
||||
extern void tcp_cwnd_application_limited(struct sock *sk);
|
||||
extern void tcp_resume_early_retransmit(struct sock *sk);
|
||||
extern void tcp_rearm_rto(struct sock *sk);
|
||||
extern void tcp_reset(struct sock *sk);
|
||||
|
||||
/* tcp_timer.c */
|
||||
extern void tcp_init_xmit_timers(struct sock *);
|
||||
@@ -576,6 +599,7 @@ extern int tcp_mtu_to_mss(struct sock *sk, int pmtu);
|
||||
extern int tcp_mss_to_mtu(struct sock *sk, int mss);
|
||||
extern void tcp_mtup_init(struct sock *sk);
|
||||
extern void tcp_valid_rtt_meas(struct sock *sk, u32 seq_rtt);
|
||||
extern void tcp_init_buffer_space(struct sock *sk);
|
||||
|
||||
static inline void tcp_bound_rto(const struct sock *sk)
|
||||
{
|
||||
@@ -1094,6 +1118,7 @@ static inline void tcp_openreq_init(struct request_sock *req,
|
||||
req->rcv_wnd = 0; /* So that tcp_send_synack() knows! */
|
||||
req->cookie_ts = 0;
|
||||
tcp_rsk(req)->rcv_isn = TCP_SKB_CB(skb)->seq;
|
||||
tcp_rsk(req)->rcv_nxt = TCP_SKB_CB(skb)->seq + 1;
|
||||
req->mss = rx_opt->mss_clamp;
|
||||
req->ts_recent = rx_opt->saw_tstamp ? rx_opt->rcv_tsval : 0;
|
||||
ireq->tstamp_ok = rx_opt->tstamp_ok;
|
||||
@@ -1298,15 +1323,34 @@ extern int tcp_md5_hash_skb_data(struct tcp_md5sig_pool *, const struct sk_buff
|
||||
extern int tcp_md5_hash_key(struct tcp_md5sig_pool *hp,
|
||||
const struct tcp_md5sig_key *key);
|
||||
|
||||
/* From tcp_fastopen.c */
|
||||
extern void tcp_fastopen_cache_get(struct sock *sk, u16 *mss,
|
||||
struct tcp_fastopen_cookie *cookie,
|
||||
int *syn_loss, unsigned long *last_syn_loss);
|
||||
extern void tcp_fastopen_cache_set(struct sock *sk, u16 mss,
|
||||
struct tcp_fastopen_cookie *cookie,
|
||||
bool syn_lost);
|
||||
struct tcp_fastopen_request {
|
||||
/* Fast Open cookie. Size 0 means a cookie request */
|
||||
struct tcp_fastopen_cookie cookie;
|
||||
struct msghdr *data; /* data in MSG_FASTOPEN */
|
||||
u16 copied; /* queued in tcp_connect() */
|
||||
};
|
||||
|
||||
void tcp_free_fastopen_req(struct tcp_sock *tp);
|
||||
|
||||
extern struct tcp_fastopen_context __rcu *tcp_fastopen_ctx;
|
||||
int tcp_fastopen_reset_cipher(void *key, unsigned int len);
|
||||
void tcp_fastopen_cookie_gen(__be32 addr, struct tcp_fastopen_cookie *foc);
|
||||
|
||||
#define TCP_FASTOPEN_KEY_LENGTH 16
|
||||
|
||||
/* Fastopen key context */
|
||||
struct tcp_fastopen_context {
|
||||
struct crypto_cipher __rcu *tfm;
|
||||
__u8 key[TCP_FASTOPEN_KEY_LENGTH];
|
||||
struct rcu_head rcu;
|
||||
};
|
||||
|
||||
/* write queue abstraction */
|
||||
static inline void tcp_write_queue_purge(struct sock *sk)
|
||||
{
|
||||
@@ -1510,7 +1554,8 @@ struct tcp_iter_state {
|
||||
sa_family_t family;
|
||||
enum tcp_seq_states state;
|
||||
struct sock *syn_wait_sk;
|
||||
int bucket, offset, sbucket, num, uid;
|
||||
int bucket, offset, sbucket, num;
|
||||
kuid_t uid;
|
||||
loff_t last_pos;
|
||||
};
|
||||
|
||||
|
||||
@@ -503,8 +503,6 @@ struct se_cmd {
|
||||
u32 se_ordered_id;
|
||||
/* Total size in bytes associated with command */
|
||||
u32 data_length;
|
||||
/* SCSI Presented Data Transfer Length */
|
||||
u32 cmd_spdtl;
|
||||
u32 residual_count;
|
||||
u32 orig_fe_lun;
|
||||
/* Persistent Reservation key */
|
||||
|
||||
Reference in New Issue
Block a user