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:
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user