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: (1815 commits) mac80211: fix reorder buffer release iwmc3200wifi: Enable wimax core through module parameter iwmc3200wifi: Add wifi-wimax coexistence mode as a module parameter iwmc3200wifi: Coex table command does not expect a response iwmc3200wifi: Update wiwi priority table iwlwifi: driver version track kernel version iwlwifi: indicate uCode type when fail dump error/event log iwl3945: remove duplicated event logging code b43: fix two warnings ipw2100: fix rebooting hang with driver loaded cfg80211: indent regulatory messages with spaces iwmc3200wifi: fix NULL pointer dereference in pmkid update mac80211: Fix TX status reporting for injected data frames ath9k: enable 2GHz band only if the device supports it airo: Fix integer overflow warning rt2x00: Fix padding bug on L2PAD devices. WE: Fix set events not propagated b43legacy: avoid PPC fault during resume b43: avoid PPC fault during resume tcp: fix a timewait refcnt race ... Fix up conflicts due to sysctl cleanups (dead sysctl_check code and CTL_UNNUMBERED removed) in kernel/sysctl_check.c net/ipv4/sysctl_net_ipv4.c net/ipv6/addrconf.c net/sctp/sysctl.c
This commit is contained in:
@@ -1,43 +1,20 @@
|
||||
#ifndef _NET_AH_H
|
||||
#define _NET_AH_H
|
||||
|
||||
#include <linux/crypto.h>
|
||||
#include <net/xfrm.h>
|
||||
#include <linux/skbuff.h>
|
||||
|
||||
/* This is the maximum truncated ICV length that we know of. */
|
||||
#define MAX_AH_AUTH_LEN 12
|
||||
|
||||
struct ah_data
|
||||
{
|
||||
u8 *work_icv;
|
||||
struct crypto_ahash;
|
||||
|
||||
struct ah_data {
|
||||
int icv_full_len;
|
||||
int icv_trunc_len;
|
||||
|
||||
struct crypto_hash *tfm;
|
||||
struct crypto_ahash *ahash;
|
||||
};
|
||||
|
||||
static inline int ah_mac_digest(struct ah_data *ahp, struct sk_buff *skb,
|
||||
u8 *auth_data)
|
||||
{
|
||||
struct hash_desc desc;
|
||||
int err;
|
||||
|
||||
desc.tfm = ahp->tfm;
|
||||
desc.flags = 0;
|
||||
|
||||
memset(auth_data, 0, ahp->icv_trunc_len);
|
||||
err = crypto_hash_init(&desc);
|
||||
if (unlikely(err))
|
||||
goto out;
|
||||
err = skb_icv_walk(skb, &desc, 0, skb->len, crypto_hash_update);
|
||||
if (unlikely(err))
|
||||
goto out;
|
||||
err = crypto_hash_final(&desc, ahp->work_icv);
|
||||
|
||||
out:
|
||||
return err;
|
||||
}
|
||||
|
||||
struct ip_auth_hdr;
|
||||
|
||||
static inline struct ip_auth_hdr *ip_auth_hdr(const struct sk_buff *skb)
|
||||
|
@@ -121,7 +121,7 @@ struct bt_sock_list {
|
||||
rwlock_t lock;
|
||||
};
|
||||
|
||||
int bt_sock_register(int proto, struct net_proto_family *ops);
|
||||
int bt_sock_register(int proto, const struct net_proto_family *ops);
|
||||
int bt_sock_unregister(int proto);
|
||||
void bt_sock_link(struct bt_sock_list *l, struct sock *s);
|
||||
void bt_sock_unlink(struct bt_sock_list *l, struct sock *s);
|
||||
|
@@ -367,22 +367,6 @@ static inline void hci_conn_put(struct hci_conn *conn)
|
||||
}
|
||||
}
|
||||
|
||||
/* ----- HCI tasks ----- */
|
||||
static inline void hci_sched_cmd(struct hci_dev *hdev)
|
||||
{
|
||||
tasklet_schedule(&hdev->cmd_task);
|
||||
}
|
||||
|
||||
static inline void hci_sched_rx(struct hci_dev *hdev)
|
||||
{
|
||||
tasklet_schedule(&hdev->rx_task);
|
||||
}
|
||||
|
||||
static inline void hci_sched_tx(struct hci_dev *hdev)
|
||||
{
|
||||
tasklet_schedule(&hdev->tx_task);
|
||||
}
|
||||
|
||||
/* ----- HCI Devices ----- */
|
||||
static inline void __hci_dev_put(struct hci_dev *d)
|
||||
{
|
||||
@@ -437,28 +421,7 @@ int hci_inquiry(void __user *arg);
|
||||
|
||||
void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb);
|
||||
|
||||
/* Receive frame from HCI drivers */
|
||||
static inline int hci_recv_frame(struct sk_buff *skb)
|
||||
{
|
||||
struct hci_dev *hdev = (struct hci_dev *) skb->dev;
|
||||
if (!hdev || (!test_bit(HCI_UP, &hdev->flags)
|
||||
&& !test_bit(HCI_INIT, &hdev->flags))) {
|
||||
kfree_skb(skb);
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
/* Incomming skb */
|
||||
bt_cb(skb)->incoming = 1;
|
||||
|
||||
/* Time stamp */
|
||||
__net_timestamp(skb);
|
||||
|
||||
/* Queue frame for rx task */
|
||||
skb_queue_tail(&hdev->rx_q, skb);
|
||||
hci_sched_rx(hdev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int hci_recv_frame(struct sk_buff *skb);
|
||||
int hci_recv_fragment(struct hci_dev *hdev, int type, void *data, int count);
|
||||
|
||||
int hci_register_sysfs(struct hci_dev *hdev);
|
||||
|
@@ -324,7 +324,6 @@ struct l2cap_pinfo {
|
||||
|
||||
__u8 next_tx_seq;
|
||||
__u8 expected_ack_seq;
|
||||
__u8 req_seq;
|
||||
__u8 expected_tx_seq;
|
||||
__u8 buffer_seq;
|
||||
__u8 buffer_seq_srej;
|
||||
@@ -375,6 +374,7 @@ struct l2cap_pinfo {
|
||||
#define L2CAP_CONN_SEND_PBIT 0x10
|
||||
#define L2CAP_CONN_REMOTE_BUSY 0x20
|
||||
#define L2CAP_CONN_LOCAL_BUSY 0x40
|
||||
#define L2CAP_CONN_REJ_ACT 0x80
|
||||
|
||||
#define __mod_retrans_timer() mod_timer(&l2cap_pi(sk)->retrans_timer, \
|
||||
jiffies + msecs_to_jiffies(L2CAP_DEFAULT_RETRANS_TO));
|
||||
|
@@ -206,10 +206,12 @@ struct ieee80211_supported_band {
|
||||
* struct vif_params - describes virtual interface parameters
|
||||
* @mesh_id: mesh ID to use
|
||||
* @mesh_id_len: length of the mesh ID
|
||||
* @use_4addr: use 4-address frames
|
||||
*/
|
||||
struct vif_params {
|
||||
u8 *mesh_id;
|
||||
int mesh_id_len;
|
||||
int use_4addr;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -232,6 +234,35 @@ struct key_params {
|
||||
u32 cipher;
|
||||
};
|
||||
|
||||
/**
|
||||
* enum survey_info_flags - survey information flags
|
||||
*
|
||||
* Used by the driver to indicate which info in &struct survey_info
|
||||
* it has filled in during the get_survey().
|
||||
*/
|
||||
enum survey_info_flags {
|
||||
SURVEY_INFO_NOISE_DBM = 1<<0,
|
||||
};
|
||||
|
||||
/**
|
||||
* 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
|
||||
*
|
||||
* This structure can later be expanded with things like
|
||||
* channel duty cycle etc.
|
||||
*/
|
||||
struct survey_info {
|
||||
struct ieee80211_channel *channel;
|
||||
u32 filled;
|
||||
s8 noise;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct beacon_parameters - beacon parameters
|
||||
*
|
||||
@@ -418,7 +449,7 @@ enum monitor_flags {
|
||||
* in during get_station() or dump_station().
|
||||
*
|
||||
* MPATH_INFO_FRAME_QLEN: @frame_qlen filled
|
||||
* MPATH_INFO_DSN: @dsn filled
|
||||
* MPATH_INFO_SN: @sn filled
|
||||
* MPATH_INFO_METRIC: @metric filled
|
||||
* MPATH_INFO_EXPTIME: @exptime filled
|
||||
* MPATH_INFO_DISCOVERY_TIMEOUT: @discovery_timeout filled
|
||||
@@ -427,7 +458,7 @@ enum monitor_flags {
|
||||
*/
|
||||
enum mpath_info_flags {
|
||||
MPATH_INFO_FRAME_QLEN = BIT(0),
|
||||
MPATH_INFO_DSN = BIT(1),
|
||||
MPATH_INFO_SN = BIT(1),
|
||||
MPATH_INFO_METRIC = BIT(2),
|
||||
MPATH_INFO_EXPTIME = BIT(3),
|
||||
MPATH_INFO_DISCOVERY_TIMEOUT = BIT(4),
|
||||
@@ -442,7 +473,7 @@ enum mpath_info_flags {
|
||||
*
|
||||
* @filled: bitfield of flags from &enum mpath_info_flags
|
||||
* @frame_qlen: number of queued frames for this destination
|
||||
* @dsn: destination sequence number
|
||||
* @sn: target sequence number
|
||||
* @metric: metric (cost) of this mesh path
|
||||
* @exptime: expiration time for the mesh path from now, in msecs
|
||||
* @flags: mesh path flags
|
||||
@@ -456,7 +487,7 @@ enum mpath_info_flags {
|
||||
struct mpath_info {
|
||||
u32 filled;
|
||||
u32 frame_qlen;
|
||||
u32 dsn;
|
||||
u32 sn;
|
||||
u32 metric;
|
||||
u32 exptime;
|
||||
u32 discovery_timeout;
|
||||
@@ -506,6 +537,7 @@ struct mesh_config {
|
||||
u32 dot11MeshHWMPactivePathTimeout;
|
||||
u16 dot11MeshHWMPpreqMinInterval;
|
||||
u16 dot11MeshHWMPnetDiameterTraversalTime;
|
||||
u8 dot11MeshHWMPRootMode;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -839,6 +871,19 @@ struct cfg80211_bitrate_mask {
|
||||
u32 fixed; /* fixed bitrate, 0 == not fixed */
|
||||
u32 maxrate; /* in kbps, 0 == no limit */
|
||||
};
|
||||
/**
|
||||
* struct cfg80211_pmksa - PMK Security Association
|
||||
*
|
||||
* This structure is passed to the set/del_pmksa() method for PMKSA
|
||||
* caching.
|
||||
*
|
||||
* @bssid: The AP's BSSID.
|
||||
* @pmkid: The PMK material itself.
|
||||
*/
|
||||
struct cfg80211_pmksa {
|
||||
u8 *bssid;
|
||||
u8 *pmkid;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct cfg80211_ops - backend description for wireless configuration
|
||||
@@ -941,7 +986,16 @@ struct cfg80211_bitrate_mask {
|
||||
* @rfkill_poll: polls the hw rfkill line, use cfg80211 reporting
|
||||
* functions to adjust rfkill hw state
|
||||
*
|
||||
* @dump_survey: get site survey information.
|
||||
*
|
||||
* @testmode_cmd: run a test mode command
|
||||
*
|
||||
* @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.
|
||||
* @del_pmksa: Delete a cached PMKID.
|
||||
* @flush_pmksa: Flush all cached PMKIDs.
|
||||
*
|
||||
*/
|
||||
struct cfg80211_ops {
|
||||
int (*suspend)(struct wiphy *wiphy);
|
||||
@@ -1060,6 +1114,15 @@ struct cfg80211_ops {
|
||||
const u8 *peer,
|
||||
const struct cfg80211_bitrate_mask *mask);
|
||||
|
||||
int (*dump_survey)(struct wiphy *wiphy, struct net_device *netdev,
|
||||
int idx, struct survey_info *info);
|
||||
|
||||
int (*set_pmksa)(struct wiphy *wiphy, struct net_device *netdev,
|
||||
struct cfg80211_pmksa *pmksa);
|
||||
int (*del_pmksa)(struct wiphy *wiphy, struct net_device *netdev,
|
||||
struct cfg80211_pmksa *pmksa);
|
||||
int (*flush_pmksa)(struct wiphy *wiphy, struct net_device *netdev);
|
||||
|
||||
/* some temporary stuff to finish wext */
|
||||
int (*set_power_mgmt)(struct wiphy *wiphy, struct net_device *dev,
|
||||
bool enabled, int timeout);
|
||||
@@ -1071,27 +1134,50 @@ struct cfg80211_ops {
|
||||
*/
|
||||
|
||||
/**
|
||||
* struct wiphy - wireless hardware description
|
||||
* @idx: the wiphy index assigned to this item
|
||||
* @class_dev: the class device representing /sys/class/ieee80211/<wiphy-name>
|
||||
* @custom_regulatory: tells us the driver for this device
|
||||
* enum wiphy_flags - wiphy capability flags
|
||||
*
|
||||
* @WIPHY_FLAG_CUSTOM_REGULATORY: tells us the driver for this device
|
||||
* has its own custom regulatory domain and cannot identify the
|
||||
* ISO / IEC 3166 alpha2 it belongs to. When this is enabled
|
||||
* we will disregard the first regulatory hint (when the
|
||||
* initiator is %REGDOM_SET_BY_CORE).
|
||||
* @strict_regulatory: tells us the driver for this device will ignore
|
||||
* regulatory domain settings until it gets its own regulatory domain
|
||||
* via its regulatory_hint(). After its gets its own regulatory domain
|
||||
* it will only allow further regulatory domain settings to further
|
||||
* enhance compliance. For example if channel 13 and 14 are disabled
|
||||
* by this regulatory domain no user regulatory domain can enable these
|
||||
* channels at a later time. This can be used for devices which do not
|
||||
* have calibration information gauranteed for frequencies or settings
|
||||
* outside of its regulatory domain.
|
||||
* @disable_beacon_hints: enable this if your driver needs to ensure that
|
||||
* passive scan flags and beaconing flags may not be lifted by cfg80211
|
||||
* due to regulatory beacon hints. For more information on beacon
|
||||
* @WIPHY_FLAG_STRICT_REGULATORY: tells us the driver for this device will
|
||||
* ignore regulatory domain settings until it gets its own regulatory
|
||||
* domain via its regulatory_hint(). After its gets its own regulatory
|
||||
* domain it will only allow further regulatory domain settings to
|
||||
* further enhance compliance. For example if channel 13 and 14 are
|
||||
* disabled by this regulatory domain no user regulatory domain can
|
||||
* enable these channels at a later time. This can be used for devices
|
||||
* which do not have calibration information gauranteed for frequencies
|
||||
* or settings outside of its regulatory domain.
|
||||
* @WIPHY_FLAG_DISABLE_BEACON_HINTS: enable this if your driver needs to ensure
|
||||
* that passive scan flags and beaconing flags may not be lifted by
|
||||
* cfg80211 due to regulatory beacon hints. For more information on beacon
|
||||
* hints read the documenation for regulatory_hint_found_beacon()
|
||||
* @WIPHY_FLAG_NETNS_OK: if not set, do not allow changing the netns of this
|
||||
* wiphy at all
|
||||
* @WIPHY_FLAG_PS_ON_BY_DEFAULT: if set to true, powersave will be enabled
|
||||
* by default -- this flag will be set depending on the kernel's default
|
||||
* on wiphy_new(), but can be changed by the driver if it has a good
|
||||
* reason to override the default
|
||||
* @WIPHY_FLAG_4ADDR_AP: supports 4addr mode even on AP (with a single station
|
||||
* on a VLAN interface)
|
||||
* @WIPHY_FLAG_4ADDR_STATION: supports 4addr mode even as a station
|
||||
*/
|
||||
enum wiphy_flags {
|
||||
WIPHY_FLAG_CUSTOM_REGULATORY = BIT(0),
|
||||
WIPHY_FLAG_STRICT_REGULATORY = BIT(1),
|
||||
WIPHY_FLAG_DISABLE_BEACON_HINTS = BIT(2),
|
||||
WIPHY_FLAG_NETNS_OK = BIT(3),
|
||||
WIPHY_FLAG_PS_ON_BY_DEFAULT = BIT(4),
|
||||
WIPHY_FLAG_4ADDR_AP = BIT(5),
|
||||
WIPHY_FLAG_4ADDR_STATION = BIT(6),
|
||||
};
|
||||
|
||||
/**
|
||||
* 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
|
||||
@@ -1106,11 +1192,6 @@ struct cfg80211_ops {
|
||||
* -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
|
||||
* @netnsok: if set to false, do not allow changing the netns of this
|
||||
* wiphy at all
|
||||
* @ps_default: default for powersave, will be set depending on the
|
||||
* kernel's default on wiphy_new(), but can be changed by the
|
||||
* driver if it has a good reason to override the default
|
||||
*/
|
||||
struct wiphy {
|
||||
/* assign these fields before you register the wiphy */
|
||||
@@ -1121,12 +1202,7 @@ struct wiphy {
|
||||
/* Supported interface modes, OR together BIT(NL80211_IFTYPE_...) */
|
||||
u16 interface_modes;
|
||||
|
||||
bool custom_regulatory;
|
||||
bool strict_regulatory;
|
||||
bool disable_beacon_hints;
|
||||
|
||||
bool netnsok;
|
||||
bool ps_default;
|
||||
u32 flags;
|
||||
|
||||
enum cfg80211_signal_type signal_type;
|
||||
|
||||
@@ -1142,6 +1218,11 @@ struct wiphy {
|
||||
u32 frag_threshold;
|
||||
u32 rts_threshold;
|
||||
|
||||
char fw_version[ETHTOOL_BUSINFO_LEN];
|
||||
u32 hw_version;
|
||||
|
||||
u8 max_num_pmkids;
|
||||
|
||||
/* If multiple wiphys are registered and you're handed e.g.
|
||||
* a regular netdev with assigned ieee80211_ptr, you won't
|
||||
* know whether it points to a wiphy your driver has registered
|
||||
@@ -1171,6 +1252,10 @@ struct wiphy {
|
||||
struct net *_net;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CFG80211_WEXT
|
||||
const struct iw_handler_def *wext;
|
||||
#endif
|
||||
|
||||
char priv[0] __attribute__((__aligned__(NETDEV_ALIGN)));
|
||||
};
|
||||
|
||||
@@ -1314,6 +1399,10 @@ struct cfg80211_cached_keys;
|
||||
* @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
|
||||
*/
|
||||
struct wireless_dev {
|
||||
struct wiphy *wiphy;
|
||||
@@ -1327,6 +1416,8 @@ struct wireless_dev {
|
||||
|
||||
struct work_struct cleanup_work;
|
||||
|
||||
bool use_4addr;
|
||||
|
||||
/* currently used for IBSS and SME - might be rearranged later */
|
||||
u8 ssid[IEEE80211_MAX_SSID_LEN];
|
||||
u8 ssid_len;
|
||||
@@ -1345,7 +1436,7 @@ struct wireless_dev {
|
||||
struct cfg80211_internal_bss *auth_bsses[MAX_AUTH_BSSES];
|
||||
struct cfg80211_internal_bss *current_bss; /* associated / joined */
|
||||
|
||||
#ifdef CONFIG_WIRELESS_EXT
|
||||
#ifdef CONFIG_CFG80211_WEXT
|
||||
/* wext data */
|
||||
struct {
|
||||
struct cfg80211_ibss_params ibss;
|
||||
@@ -1775,6 +1866,18 @@ void cfg80211_send_rx_auth(struct net_device *dev, const u8 *buf, size_t len);
|
||||
*/
|
||||
void cfg80211_send_auth_timeout(struct net_device *dev, const u8 *addr);
|
||||
|
||||
/**
|
||||
* __cfg80211_auth_canceled - notify cfg80211 that authentication was canceled
|
||||
* @dev: network device
|
||||
* @addr: The MAC address of the device with which the authentication timed out
|
||||
*
|
||||
* When a pending authentication had no action yet, the driver may decide
|
||||
* to not send a deauth frame, but in that case must calls this function
|
||||
* to tell cfg80211 about this decision. It is only valid to call this
|
||||
* function within the deauth() callback.
|
||||
*/
|
||||
void __cfg80211_auth_canceled(struct net_device *dev, const u8 *addr);
|
||||
|
||||
/**
|
||||
* cfg80211_send_rx_assoc - notification of processed association
|
||||
* @dev: network device
|
||||
@@ -1802,30 +1905,45 @@ void cfg80211_send_assoc_timeout(struct net_device *dev, const u8 *addr);
|
||||
* @dev: network device
|
||||
* @buf: deauthentication frame (header + body)
|
||||
* @len: length of the frame data
|
||||
* @cookie: cookie from ->deauth if called within that callback,
|
||||
* %NULL otherwise
|
||||
*
|
||||
* This function is called whenever deauthentication has been processed in
|
||||
* station mode. This includes both received deauthentication frames and
|
||||
* locally generated ones. This function may sleep.
|
||||
*/
|
||||
void cfg80211_send_deauth(struct net_device *dev, const u8 *buf, size_t len,
|
||||
void *cookie);
|
||||
void cfg80211_send_deauth(struct net_device *dev, const u8 *buf, size_t len);
|
||||
|
||||
/**
|
||||
* __cfg80211_send_deauth - notification of processed deauthentication
|
||||
* @dev: network device
|
||||
* @buf: deauthentication frame (header + body)
|
||||
* @len: length of the frame data
|
||||
*
|
||||
* Like cfg80211_send_deauth(), but doesn't take the wdev lock.
|
||||
*/
|
||||
void __cfg80211_send_deauth(struct net_device *dev, const u8 *buf, size_t len);
|
||||
|
||||
/**
|
||||
* cfg80211_send_disassoc - notification of processed disassociation
|
||||
* @dev: network device
|
||||
* @buf: disassociation response frame (header + body)
|
||||
* @len: length of the frame data
|
||||
* @cookie: cookie from ->disassoc if called within that callback,
|
||||
* %NULL otherwise
|
||||
*
|
||||
* This function is called whenever disassociation has been processed in
|
||||
* station mode. This includes both received disassociation frames and locally
|
||||
* generated ones. This function may sleep.
|
||||
*/
|
||||
void cfg80211_send_disassoc(struct net_device *dev, const u8 *buf, size_t len,
|
||||
void *cookie);
|
||||
void cfg80211_send_disassoc(struct net_device *dev, const u8 *buf, size_t len);
|
||||
|
||||
/**
|
||||
* __cfg80211_send_disassoc - notification of processed disassociation
|
||||
* @dev: network device
|
||||
* @buf: disassociation response frame (header + body)
|
||||
* @len: length of the frame data
|
||||
*
|
||||
* Like cfg80211_send_disassoc(), but doesn't take the wdev lock.
|
||||
*/
|
||||
void __cfg80211_send_disassoc(struct net_device *dev, const u8 *buf,
|
||||
size_t len);
|
||||
|
||||
/**
|
||||
* cfg80211_michael_mic_failure - notification of Michael MIC failure (TKIP)
|
||||
|
@@ -18,6 +18,11 @@ struct compat_msghdr {
|
||||
compat_uint_t msg_flags;
|
||||
};
|
||||
|
||||
struct compat_mmsghdr {
|
||||
struct compat_msghdr msg_hdr;
|
||||
compat_uint_t msg_len;
|
||||
};
|
||||
|
||||
struct compat_cmsghdr {
|
||||
compat_size_t cmsg_len;
|
||||
compat_int_t cmsg_level;
|
||||
@@ -28,13 +33,20 @@ extern int compat_sock_get_timestamp(struct sock *, struct timeval __user *);
|
||||
extern int compat_sock_get_timestampns(struct sock *, struct timespec __user *);
|
||||
|
||||
#else /* defined(CONFIG_COMPAT) */
|
||||
#define compat_msghdr msghdr /* to avoid compiler warnings */
|
||||
/*
|
||||
* To avoid compiler warnings:
|
||||
*/
|
||||
#define compat_msghdr msghdr
|
||||
#define compat_mmsghdr mmsghdr
|
||||
#endif /* defined(CONFIG_COMPAT) */
|
||||
|
||||
extern int get_compat_msghdr(struct msghdr *, struct compat_msghdr __user *);
|
||||
extern int verify_compat_iovec(struct msghdr *, struct iovec *, struct sockaddr *, int);
|
||||
extern asmlinkage long compat_sys_sendmsg(int,struct compat_msghdr __user *,unsigned);
|
||||
extern asmlinkage long compat_sys_recvmsg(int,struct compat_msghdr __user *,unsigned);
|
||||
extern asmlinkage long compat_sys_recvmmsg(int, struct compat_mmsghdr __user *,
|
||||
unsigned, unsigned,
|
||||
struct timespec __user *);
|
||||
extern asmlinkage long compat_sys_getsockopt(int, int, int, char __user *, int __user *);
|
||||
extern int put_cmsg_compat(struct msghdr*, int, int, int, void *);
|
||||
|
||||
|
@@ -96,16 +96,14 @@ struct dn_dev {
|
||||
unsigned long uptime; /* Time device went up in jiffies */
|
||||
};
|
||||
|
||||
struct dn_short_packet
|
||||
{
|
||||
struct dn_short_packet {
|
||||
__u8 msgflg;
|
||||
__le16 dstnode;
|
||||
__le16 srcnode;
|
||||
__u8 forward;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct dn_long_packet
|
||||
{
|
||||
struct dn_long_packet {
|
||||
__u8 msgflg;
|
||||
__u8 d_area;
|
||||
__u8 d_subarea;
|
||||
@@ -121,8 +119,7 @@ struct dn_long_packet
|
||||
|
||||
/*------------------------- DRP - Routing messages ---------------------*/
|
||||
|
||||
struct endnode_hello_message
|
||||
{
|
||||
struct endnode_hello_message {
|
||||
__u8 msgflg;
|
||||
__u8 tiver[3];
|
||||
__u8 id[6];
|
||||
@@ -137,8 +134,7 @@ struct endnode_hello_message
|
||||
__u8 data[2];
|
||||
} __attribute__((packed));
|
||||
|
||||
struct rtnode_hello_message
|
||||
{
|
||||
struct rtnode_hello_message {
|
||||
__u8 msgflg;
|
||||
__u8 tiver[3];
|
||||
__u8 id[6];
|
||||
|
@@ -4,8 +4,7 @@
|
||||
/* WARNING: The ordering of these elements must match ordering
|
||||
* of RTA_* rtnetlink attribute numbers.
|
||||
*/
|
||||
struct dn_kern_rta
|
||||
{
|
||||
struct dn_kern_rta {
|
||||
void *rta_dst;
|
||||
void *rta_src;
|
||||
int *rta_iif;
|
||||
|
@@ -70,30 +70,26 @@ extern struct sk_buff *dn_alloc_send_skb(struct sock *sk, size_t *size, int nobl
|
||||
|
||||
/* Data Messages (data segment/interrupt/link service) */
|
||||
|
||||
struct nsp_data_seg_msg
|
||||
{
|
||||
struct nsp_data_seg_msg {
|
||||
__u8 msgflg;
|
||||
__le16 dstaddr;
|
||||
__le16 srcaddr;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct nsp_data_opt_msg
|
||||
{
|
||||
struct nsp_data_opt_msg {
|
||||
__le16 acknum;
|
||||
__le16 segnum;
|
||||
__le16 lsflgs;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct nsp_data_opt_msg1
|
||||
{
|
||||
struct nsp_data_opt_msg1 {
|
||||
__le16 acknum;
|
||||
__le16 segnum;
|
||||
} __attribute__((packed));
|
||||
|
||||
|
||||
/* Acknowledgment Message (data/other data) */
|
||||
struct nsp_data_ack_msg
|
||||
{
|
||||
struct nsp_data_ack_msg {
|
||||
__u8 msgflg;
|
||||
__le16 dstaddr;
|
||||
__le16 srcaddr;
|
||||
@@ -101,16 +97,14 @@ struct nsp_data_ack_msg
|
||||
} __attribute__((packed));
|
||||
|
||||
/* Connect Acknowledgment Message */
|
||||
struct nsp_conn_ack_msg
|
||||
{
|
||||
struct nsp_conn_ack_msg {
|
||||
__u8 msgflg;
|
||||
__le16 dstaddr;
|
||||
} __attribute__((packed));
|
||||
|
||||
|
||||
/* Connect Initiate/Retransmit Initiate/Connect Confirm */
|
||||
struct nsp_conn_init_msg
|
||||
{
|
||||
struct nsp_conn_init_msg {
|
||||
__u8 msgflg;
|
||||
#define NSP_CI 0x18 /* Connect Initiate */
|
||||
#define NSP_RCI 0x68 /* Retrans. Conn Init */
|
||||
@@ -126,8 +120,7 @@ struct nsp_conn_init_msg
|
||||
} __attribute__((packed));
|
||||
|
||||
/* Disconnect Initiate/Disconnect Confirm */
|
||||
struct nsp_disconn_init_msg
|
||||
{
|
||||
struct nsp_disconn_init_msg {
|
||||
__u8 msgflg;
|
||||
__le16 dstaddr;
|
||||
__le16 srcaddr;
|
||||
@@ -136,8 +129,7 @@ struct nsp_disconn_init_msg
|
||||
|
||||
|
||||
|
||||
struct srcobj_fmt
|
||||
{
|
||||
struct srcobj_fmt {
|
||||
__u8 format;
|
||||
__u8 task;
|
||||
__le16 grpcode;
|
||||
|
@@ -36,8 +36,7 @@
|
||||
|
||||
struct sk_buff;
|
||||
|
||||
struct dst_entry
|
||||
{
|
||||
struct dst_entry {
|
||||
struct rcu_head rcu_head;
|
||||
struct dst_entry *child;
|
||||
struct net_device *dev;
|
||||
@@ -111,6 +110,12 @@ dst_metric(const struct dst_entry *dst, int metric)
|
||||
return dst->metrics[metric-1];
|
||||
}
|
||||
|
||||
static inline u32
|
||||
dst_feature(const struct dst_entry *dst, u32 feature)
|
||||
{
|
||||
return (dst ? dst_metric(dst, RTAX_FEATURES) & feature : 0);
|
||||
}
|
||||
|
||||
static inline u32 dst_mtu(const struct dst_entry *dst)
|
||||
{
|
||||
u32 mtu = dst_metric(dst, RTAX_MTU);
|
||||
@@ -136,7 +141,7 @@ static inline void set_dst_metric_rtt(struct dst_entry *dst, int metric,
|
||||
static inline u32
|
||||
dst_allfrag(const struct dst_entry *dst)
|
||||
{
|
||||
int ret = dst_metric(dst, RTAX_FEATURES) & RTAX_FEATURE_ALLFRAG;
|
||||
int ret = dst_feature(dst, RTAX_FEATURE_ALLFRAG);
|
||||
/* Yes, _exactly_. This is paranoia. */
|
||||
barrier();
|
||||
return ret;
|
||||
@@ -222,11 +227,19 @@ static inline void dst_confirm(struct dst_entry *dst)
|
||||
neigh_confirm(dst->neighbour);
|
||||
}
|
||||
|
||||
static inline void dst_negative_advice(struct dst_entry **dst_p)
|
||||
static inline void dst_negative_advice(struct dst_entry **dst_p,
|
||||
struct sock *sk)
|
||||
{
|
||||
struct dst_entry * dst = *dst_p;
|
||||
if (dst && dst->ops->negative_advice)
|
||||
if (dst && dst->ops->negative_advice) {
|
||||
*dst_p = dst->ops->negative_advice(dst);
|
||||
|
||||
if (dst != *dst_p) {
|
||||
extern void sk_reset_txq(struct sock *sk);
|
||||
|
||||
sk_reset_txq(sk);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static inline void dst_link_failure(struct sk_buff *skb)
|
||||
|
@@ -7,12 +7,11 @@
|
||||
#include <net/flow.h>
|
||||
#include <net/rtnetlink.h>
|
||||
|
||||
struct fib_rule
|
||||
{
|
||||
struct fib_rule {
|
||||
struct list_head list;
|
||||
atomic_t refcnt;
|
||||
int ifindex;
|
||||
char ifname[IFNAMSIZ];
|
||||
int iifindex;
|
||||
int oifindex;
|
||||
u32 mark;
|
||||
u32 mark_mask;
|
||||
u32 pref;
|
||||
@@ -21,19 +20,19 @@ struct fib_rule
|
||||
u8 action;
|
||||
u32 target;
|
||||
struct fib_rule * ctarget;
|
||||
char iifname[IFNAMSIZ];
|
||||
char oifname[IFNAMSIZ];
|
||||
struct rcu_head rcu;
|
||||
struct net * fr_net;
|
||||
};
|
||||
|
||||
struct fib_lookup_arg
|
||||
{
|
||||
struct fib_lookup_arg {
|
||||
void *lookup_ptr;
|
||||
void *result;
|
||||
struct fib_rule *rule;
|
||||
};
|
||||
|
||||
struct fib_rules_ops
|
||||
{
|
||||
struct fib_rules_ops {
|
||||
int family;
|
||||
struct list_head list;
|
||||
int rule_size;
|
||||
@@ -67,10 +66,12 @@ struct fib_rules_ops
|
||||
struct list_head rules_list;
|
||||
struct module *owner;
|
||||
struct net *fro_net;
|
||||
struct rcu_head rcu;
|
||||
};
|
||||
|
||||
#define FRA_GENERIC_POLICY \
|
||||
[FRA_IFNAME] = { .type = NLA_STRING, .len = IFNAMSIZ - 1 }, \
|
||||
[FRA_IIFNAME] = { .type = NLA_STRING, .len = IFNAMSIZ - 1 }, \
|
||||
[FRA_OIFNAME] = { .type = NLA_STRING, .len = IFNAMSIZ - 1 }, \
|
||||
[FRA_PRIORITY] = { .type = NLA_U32 }, \
|
||||
[FRA_FWMARK] = { .type = NLA_U32 }, \
|
||||
[FRA_FWMASK] = { .type = NLA_U32 }, \
|
||||
@@ -102,7 +103,7 @@ static inline u32 frh_get_table(struct fib_rule_hdr *frh, struct nlattr **nla)
|
||||
return frh->table;
|
||||
}
|
||||
|
||||
extern int fib_rules_register(struct fib_rules_ops *);
|
||||
extern struct fib_rules_ops *fib_rules_register(struct fib_rules_ops *, struct net *);
|
||||
extern void fib_rules_unregister(struct fib_rules_ops *);
|
||||
extern void fib_rules_cleanup_ops(struct fib_rules_ops *);
|
||||
|
||||
|
@@ -6,8 +6,7 @@
|
||||
#include <linux/rtnetlink.h>
|
||||
#include <linux/pkt_sched.h>
|
||||
|
||||
struct gnet_dump
|
||||
{
|
||||
struct gnet_dump {
|
||||
spinlock_t * lock;
|
||||
struct sk_buff * skb;
|
||||
struct nlattr * tail;
|
||||
@@ -30,6 +29,7 @@ extern int gnet_stats_start_copy_compat(struct sk_buff *skb, int type,
|
||||
extern int gnet_stats_copy_basic(struct gnet_dump *d,
|
||||
struct gnet_stats_basic_packed *b);
|
||||
extern int gnet_stats_copy_rate_est(struct gnet_dump *d,
|
||||
const struct gnet_stats_basic_packed *b,
|
||||
struct gnet_stats_rate_est *r);
|
||||
extern int gnet_stats_copy_queue(struct gnet_dump *d,
|
||||
struct gnet_stats_queue *q);
|
||||
|
@@ -13,8 +13,7 @@
|
||||
* @list: list entry for linking
|
||||
* @family: pointer to family, need not be set before registering
|
||||
*/
|
||||
struct genl_multicast_group
|
||||
{
|
||||
struct genl_multicast_group {
|
||||
struct genl_family *family; /* private */
|
||||
struct list_head list; /* private */
|
||||
char name[GENL_NAMSIZ];
|
||||
@@ -35,8 +34,7 @@ struct genl_multicast_group
|
||||
* @family_list: family list
|
||||
* @mcast_groups: multicast groups list
|
||||
*/
|
||||
struct genl_family
|
||||
{
|
||||
struct genl_family {
|
||||
unsigned int id;
|
||||
unsigned int hdrsize;
|
||||
char name[GENL_NAMSIZ];
|
||||
@@ -58,8 +56,7 @@ struct genl_family
|
||||
* @userhdr: user specific header
|
||||
* @attrs: netlink attributes
|
||||
*/
|
||||
struct genl_info
|
||||
{
|
||||
struct genl_info {
|
||||
u32 snd_seq;
|
||||
u32 snd_pid;
|
||||
struct nlmsghdr * nlhdr;
|
||||
@@ -102,8 +99,7 @@ static inline void genl_info_net_set(struct genl_info *info, struct net *net)
|
||||
* @done: completion callback for dumps
|
||||
* @ops_list: operations list
|
||||
*/
|
||||
struct genl_ops
|
||||
{
|
||||
struct genl_ops {
|
||||
u8 cmd;
|
||||
unsigned int flags;
|
||||
const struct nla_policy *policy;
|
||||
|
@@ -80,7 +80,7 @@ struct ieee80211_radiotap_header {
|
||||
* Additional extensions are made
|
||||
* by setting bit 31.
|
||||
*/
|
||||
};
|
||||
} __packed;
|
||||
|
||||
/* Name Data type Units
|
||||
* ---- --------- -----
|
||||
|
@@ -74,8 +74,12 @@ static inline int mac_cb_type(struct sk_buff *skb)
|
||||
#define IEEE802154_MAC_SCAN_PASSIVE 2
|
||||
#define IEEE802154_MAC_SCAN_ORPHAN 3
|
||||
|
||||
struct wpan_phy;
|
||||
/*
|
||||
* This should be located at net_device->ml_priv
|
||||
*
|
||||
* get_phy should increment the reference counting on returned phy.
|
||||
* Use wpan_wpy_put to put that reference.
|
||||
*/
|
||||
struct ieee802154_mlme_ops {
|
||||
int (*assoc_req)(struct net_device *dev,
|
||||
@@ -94,18 +98,20 @@ struct ieee802154_mlme_ops {
|
||||
int (*scan_req)(struct net_device *dev,
|
||||
u8 type, u32 channels, u8 page, u8 duration);
|
||||
|
||||
struct wpan_phy *(*get_phy)(const struct net_device *dev);
|
||||
|
||||
/*
|
||||
* FIXME: these should become the part of PIB/MIB interface.
|
||||
* However we still don't have IB interface of any kind
|
||||
*/
|
||||
u16 (*get_pan_id)(struct net_device *dev);
|
||||
u16 (*get_short_addr)(struct net_device *dev);
|
||||
u8 (*get_dsn)(struct net_device *dev);
|
||||
u8 (*get_bsn)(struct net_device *dev);
|
||||
u16 (*get_pan_id)(const struct net_device *dev);
|
||||
u16 (*get_short_addr)(const struct net_device *dev);
|
||||
u8 (*get_dsn)(const struct net_device *dev);
|
||||
u8 (*get_bsn)(const struct net_device *dev);
|
||||
};
|
||||
|
||||
static inline struct ieee802154_mlme_ops *ieee802154_mlme_ops(
|
||||
struct net_device *dev)
|
||||
const struct net_device *dev)
|
||||
{
|
||||
return dev->ml_priv;
|
||||
}
|
||||
|
@@ -32,8 +32,7 @@
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
struct inet6_ifaddr
|
||||
{
|
||||
struct inet6_ifaddr {
|
||||
struct in6_addr addr;
|
||||
__u32 prefix_len;
|
||||
|
||||
@@ -67,8 +66,7 @@ struct inet6_ifaddr
|
||||
int dead;
|
||||
};
|
||||
|
||||
struct ip6_sf_socklist
|
||||
{
|
||||
struct ip6_sf_socklist {
|
||||
unsigned int sl_max;
|
||||
unsigned int sl_count;
|
||||
struct in6_addr sl_addr[0];
|
||||
@@ -79,8 +77,7 @@ struct ip6_sf_socklist
|
||||
|
||||
#define IP6_SFBLOCK 10 /* allocate this many at once */
|
||||
|
||||
struct ipv6_mc_socklist
|
||||
{
|
||||
struct ipv6_mc_socklist {
|
||||
struct in6_addr addr;
|
||||
int ifindex;
|
||||
struct ipv6_mc_socklist *next;
|
||||
@@ -89,8 +86,7 @@ struct ipv6_mc_socklist
|
||||
struct ip6_sf_socklist *sflist;
|
||||
};
|
||||
|
||||
struct ip6_sf_list
|
||||
{
|
||||
struct ip6_sf_list {
|
||||
struct ip6_sf_list *sf_next;
|
||||
struct in6_addr sf_addr;
|
||||
unsigned long sf_count[2]; /* include/exclude counts */
|
||||
@@ -105,8 +101,7 @@ struct ip6_sf_list
|
||||
#define MAF_NOREPORT 0x08
|
||||
#define MAF_GSQUERY 0x10
|
||||
|
||||
struct ifmcaddr6
|
||||
{
|
||||
struct ifmcaddr6 {
|
||||
struct in6_addr mca_addr;
|
||||
struct inet6_dev *idev;
|
||||
struct ifmcaddr6 *next;
|
||||
@@ -126,15 +121,13 @@ struct ifmcaddr6
|
||||
|
||||
/* Anycast stuff */
|
||||
|
||||
struct ipv6_ac_socklist
|
||||
{
|
||||
struct ipv6_ac_socklist {
|
||||
struct in6_addr acl_addr;
|
||||
int acl_ifindex;
|
||||
struct ipv6_ac_socklist *acl_next;
|
||||
};
|
||||
|
||||
struct ifacaddr6
|
||||
{
|
||||
struct ifacaddr6 {
|
||||
struct in6_addr aca_addr;
|
||||
struct inet6_dev *aca_idev;
|
||||
struct rt6_info *aca_rt;
|
||||
@@ -157,8 +150,7 @@ struct ipv6_devstat {
|
||||
DEFINE_SNMP_STAT(struct icmpv6msg_mib, icmpv6msg);
|
||||
};
|
||||
|
||||
struct inet6_dev
|
||||
{
|
||||
struct inet6_dev {
|
||||
struct net_device *dev;
|
||||
|
||||
struct inet6_ifaddr *addr_list;
|
||||
|
@@ -46,8 +46,8 @@ static inline int inet6_sk_ehashfn(const struct sock *sk)
|
||||
const struct ipv6_pinfo *np = inet6_sk(sk);
|
||||
const struct in6_addr *laddr = &np->rcv_saddr;
|
||||
const struct in6_addr *faddr = &np->daddr;
|
||||
const __u16 lport = inet->num;
|
||||
const __be16 fport = inet->dport;
|
||||
const __u16 lport = inet->inet_num;
|
||||
const __be16 fport = inet->inet_dport;
|
||||
struct net *net = sock_net(sk);
|
||||
|
||||
return inet6_ehashfn(net, laddr, lport, faddr, fport);
|
||||
|
@@ -92,8 +92,8 @@ static inline struct net *ib_net(struct inet_bind_bucket *ib)
|
||||
return read_pnet(&ib->ib_net);
|
||||
}
|
||||
|
||||
#define inet_bind_bucket_for_each(tb, node, head) \
|
||||
hlist_for_each_entry(tb, node, head, node)
|
||||
#define inet_bind_bucket_for_each(tb, pos, head) \
|
||||
hlist_for_each_entry(tb, pos, head, node)
|
||||
|
||||
struct inet_bind_hashbucket {
|
||||
spinlock_t lock;
|
||||
@@ -125,7 +125,7 @@ struct inet_hashinfo {
|
||||
*/
|
||||
struct inet_ehash_bucket *ehash;
|
||||
spinlock_t *ehash_locks;
|
||||
unsigned int ehash_size;
|
||||
unsigned int ehash_mask;
|
||||
unsigned int ehash_locks_mask;
|
||||
|
||||
/* Ok, let's try this, I give up, we do need a local binding
|
||||
@@ -158,7 +158,7 @@ static inline struct inet_ehash_bucket *inet_ehash_bucket(
|
||||
struct inet_hashinfo *hashinfo,
|
||||
unsigned int hash)
|
||||
{
|
||||
return &hashinfo->ehash[hash & (hashinfo->ehash_size - 1)];
|
||||
return &hashinfo->ehash[hash & hashinfo->ehash_mask];
|
||||
}
|
||||
|
||||
static inline spinlock_t *inet_ehash_lockp(
|
||||
@@ -241,7 +241,7 @@ static inline int inet_lhashfn(struct net *net, const unsigned short num)
|
||||
|
||||
static inline int inet_sk_listen_hashfn(const struct sock *sk)
|
||||
{
|
||||
return inet_lhashfn(sock_net(sk), inet_sk(sk)->num);
|
||||
return inet_lhashfn(sock_net(sk), inet_sk(sk)->inet_num);
|
||||
}
|
||||
|
||||
/* Caller must disable local BH processing. */
|
||||
@@ -301,8 +301,8 @@ typedef __u64 __bitwise __addrpair;
|
||||
#endif /* __BIG_ENDIAN */
|
||||
#define INET_MATCH(__sk, __net, __hash, __cookie, __saddr, __daddr, __ports, __dif)\
|
||||
(((__sk)->sk_hash == (__hash)) && net_eq(sock_net(__sk), (__net)) && \
|
||||
((*((__addrpair *)&(inet_sk(__sk)->daddr))) == (__cookie)) && \
|
||||
((*((__portpair *)&(inet_sk(__sk)->dport))) == (__ports)) && \
|
||||
((*((__addrpair *)&(inet_sk(__sk)->inet_daddr))) == (__cookie)) && \
|
||||
((*((__portpair *)&(inet_sk(__sk)->inet_dport))) == (__ports)) && \
|
||||
(!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif))))
|
||||
#define INET_TW_MATCH(__sk, __net, __hash, __cookie, __saddr, __daddr, __ports, __dif)\
|
||||
(((__sk)->sk_hash == (__hash)) && net_eq(sock_net(__sk), (__net)) && \
|
||||
@@ -313,9 +313,9 @@ typedef __u64 __bitwise __addrpair;
|
||||
#define INET_ADDR_COOKIE(__name, __saddr, __daddr)
|
||||
#define INET_MATCH(__sk, __net, __hash, __cookie, __saddr, __daddr, __ports, __dif) \
|
||||
(((__sk)->sk_hash == (__hash)) && net_eq(sock_net(__sk), (__net)) && \
|
||||
(inet_sk(__sk)->daddr == (__saddr)) && \
|
||||
(inet_sk(__sk)->rcv_saddr == (__daddr)) && \
|
||||
((*((__portpair *)&(inet_sk(__sk)->dport))) == (__ports)) && \
|
||||
(inet_sk(__sk)->inet_daddr == (__saddr)) && \
|
||||
(inet_sk(__sk)->inet_rcv_saddr == (__daddr)) && \
|
||||
((*((__portpair *)&(inet_sk(__sk)->inet_dport))) == (__ports)) && \
|
||||
(!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif))))
|
||||
#define INET_TW_MATCH(__sk, __net, __hash,__cookie, __saddr, __daddr, __ports, __dif) \
|
||||
(((__sk)->sk_hash == (__hash)) && net_eq(sock_net(__sk), (__net)) && \
|
||||
|
@@ -93,14 +93,14 @@ struct rtable;
|
||||
*
|
||||
* @sk - ancestor class
|
||||
* @pinet6 - pointer to IPv6 control block
|
||||
* @daddr - Foreign IPv4 addr
|
||||
* @rcv_saddr - Bound local IPv4 addr
|
||||
* @dport - Destination port
|
||||
* @num - Local port
|
||||
* @saddr - Sending source
|
||||
* @inet_daddr - Foreign IPv4 addr
|
||||
* @inet_rcv_saddr - Bound local IPv4 addr
|
||||
* @inet_dport - Destination port
|
||||
* @inet_num - Local port
|
||||
* @inet_saddr - Sending source
|
||||
* @uc_ttl - Unicast TTL
|
||||
* @sport - Source port
|
||||
* @id - ID counter for DF pkts
|
||||
* @inet_sport - Source port
|
||||
* @inet_id - ID counter for DF pkts
|
||||
* @tos - TOS
|
||||
* @mc_ttl - Multicasting TTL
|
||||
* @is_icsk - is this an inet_connection_sock?
|
||||
@@ -115,16 +115,16 @@ struct inet_sock {
|
||||
struct ipv6_pinfo *pinet6;
|
||||
#endif
|
||||
/* Socket demultiplex comparisons on incoming packets. */
|
||||
__be32 daddr;
|
||||
__be32 rcv_saddr;
|
||||
__be16 dport;
|
||||
__u16 num;
|
||||
__be32 saddr;
|
||||
__be32 inet_daddr;
|
||||
__be32 inet_rcv_saddr;
|
||||
__be16 inet_dport;
|
||||
__u16 inet_num;
|
||||
__be32 inet_saddr;
|
||||
__s16 uc_ttl;
|
||||
__u16 cmsg_flags;
|
||||
struct ip_options *opt;
|
||||
__be16 sport;
|
||||
__u16 id;
|
||||
__be16 inet_sport;
|
||||
__u16 inet_id;
|
||||
__u8 tos;
|
||||
__u8 mc_ttl;
|
||||
__u8 pmtudisc;
|
||||
@@ -190,10 +190,10 @@ static inline unsigned int inet_ehashfn(struct net *net,
|
||||
static inline int inet_sk_ehashfn(const struct sock *sk)
|
||||
{
|
||||
const struct inet_sock *inet = inet_sk(sk);
|
||||
const __be32 laddr = inet->rcv_saddr;
|
||||
const __u16 lport = inet->num;
|
||||
const __be32 faddr = inet->daddr;
|
||||
const __be16 fport = inet->dport;
|
||||
const __be32 laddr = inet->inet_rcv_saddr;
|
||||
const __u16 lport = inet->inet_num;
|
||||
const __be32 faddr = inet->inet_daddr;
|
||||
const __be16 fport = inet->inet_dport;
|
||||
struct net *net = sock_net(sk);
|
||||
|
||||
return inet_ehashfn(net, laddr, lport, faddr, fport);
|
||||
|
@@ -194,11 +194,13 @@ static inline struct inet_timewait_sock *inet_twsk(const struct sock *sk)
|
||||
static inline __be32 inet_rcv_saddr(const struct sock *sk)
|
||||
{
|
||||
return likely(sk->sk_state != TCP_TIME_WAIT) ?
|
||||
inet_sk(sk)->rcv_saddr : inet_twsk(sk)->tw_rcv_saddr;
|
||||
inet_sk(sk)->inet_rcv_saddr : inet_twsk(sk)->tw_rcv_saddr;
|
||||
}
|
||||
|
||||
extern void inet_twsk_put(struct inet_timewait_sock *tw);
|
||||
|
||||
extern int inet_twsk_unhash(struct inet_timewait_sock *tw);
|
||||
|
||||
extern struct inet_timewait_sock *inet_twsk_alloc(const struct sock *sk,
|
||||
const int state);
|
||||
|
||||
@@ -212,14 +214,14 @@ extern void inet_twsk_schedule(struct inet_timewait_sock *tw,
|
||||
extern void inet_twsk_deschedule(struct inet_timewait_sock *tw,
|
||||
struct inet_timewait_death_row *twdr);
|
||||
|
||||
extern void inet_twsk_purge(struct net *net, struct inet_hashinfo *hashinfo,
|
||||
extern void inet_twsk_purge(struct inet_hashinfo *hashinfo,
|
||||
struct inet_timewait_death_row *twdr, int family);
|
||||
|
||||
static inline
|
||||
struct net *twsk_net(const struct inet_timewait_sock *twsk)
|
||||
{
|
||||
#ifdef CONFIG_NET_NS
|
||||
return twsk->tw_net;
|
||||
return rcu_dereference(twsk->tw_net);
|
||||
#else
|
||||
return &init_net;
|
||||
#endif
|
||||
@@ -229,7 +231,7 @@ static inline
|
||||
void twsk_net_set(struct inet_timewait_sock *twsk, struct net *net)
|
||||
{
|
||||
#ifdef CONFIG_NET_NS
|
||||
twsk->tw_net = net;
|
||||
rcu_assign_pointer(twsk->tw_net, net);
|
||||
#endif
|
||||
}
|
||||
#endif /* _INET_TIMEWAIT_SOCK_ */
|
||||
|
@@ -13,20 +13,19 @@
|
||||
#include <linux/spinlock.h>
|
||||
#include <asm/atomic.h>
|
||||
|
||||
struct inet_peer
|
||||
{
|
||||
struct inet_peer {
|
||||
/* group together avl_left,avl_right,v4daddr to speedup lookups */
|
||||
struct inet_peer *avl_left, *avl_right;
|
||||
__be32 v4daddr; /* peer's address */
|
||||
__u16 avl_height;
|
||||
__u16 ip_id_count; /* IP ID for the next packet */
|
||||
__u32 avl_height;
|
||||
struct list_head unused;
|
||||
__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;
|
||||
unsigned long tcp_ts_stamp;
|
||||
__u32 tcp_ts_stamp;
|
||||
};
|
||||
|
||||
void inet_initpeers(void) __init;
|
||||
@@ -37,17 +36,11 @@ 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);
|
||||
|
||||
extern spinlock_t inet_peer_idlock;
|
||||
/* can be called with or without local BH being disabled */
|
||||
static inline __u16 inet_getid(struct inet_peer *p, int more)
|
||||
{
|
||||
__u16 id;
|
||||
|
||||
spin_lock_bh(&inet_peer_idlock);
|
||||
id = p->ip_id_count;
|
||||
p->ip_id_count += 1 + more;
|
||||
spin_unlock_bh(&inet_peer_idlock);
|
||||
return id;
|
||||
more++;
|
||||
return atomic_add_return(more, &p->ip_id_count) - more;
|
||||
}
|
||||
|
||||
#endif /* _NET_INETPEER_H */
|
||||
|
@@ -33,8 +33,7 @@
|
||||
|
||||
struct sock;
|
||||
|
||||
struct inet_skb_parm
|
||||
{
|
||||
struct inet_skb_parm {
|
||||
struct ip_options opt; /* Compiled IP options */
|
||||
unsigned char flags;
|
||||
|
||||
@@ -50,8 +49,7 @@ static inline unsigned int ip_hdrlen(const struct sk_buff *skb)
|
||||
return ip_hdr(skb)->ihl * 4;
|
||||
}
|
||||
|
||||
struct ipcm_cookie
|
||||
{
|
||||
struct ipcm_cookie {
|
||||
__be32 addr;
|
||||
int oif;
|
||||
struct ip_options *opt;
|
||||
@@ -60,8 +58,7 @@ struct ipcm_cookie
|
||||
|
||||
#define IPCB(skb) ((struct inet_skb_parm*)((skb)->cb))
|
||||
|
||||
struct ip_ra_chain
|
||||
{
|
||||
struct ip_ra_chain {
|
||||
struct ip_ra_chain *next;
|
||||
struct sock *sk;
|
||||
void (*destructor)(struct sock *);
|
||||
@@ -159,8 +156,7 @@ static inline __u8 ip_reply_arg_flowi_flags(const struct ip_reply_arg *arg)
|
||||
void ip_send_reply(struct sock *sk, struct sk_buff *skb, struct ip_reply_arg *arg,
|
||||
unsigned int len);
|
||||
|
||||
struct ipv4_config
|
||||
{
|
||||
struct ipv4_config {
|
||||
int log_martians;
|
||||
int no_pmtu_disc;
|
||||
};
|
||||
@@ -240,8 +236,8 @@ static inline void ip_select_ident(struct iphdr *iph, struct dst_entry *dst, str
|
||||
* does not change, they drop every other packet in
|
||||
* a TCP stream using header compression.
|
||||
*/
|
||||
iph->id = (sk && inet_sk(sk)->daddr) ?
|
||||
htons(inet_sk(sk)->id++) : 0;
|
||||
iph->id = (sk && inet_sk(sk)->inet_daddr) ?
|
||||
htons(inet_sk(sk)->inet_id++) : 0;
|
||||
} else
|
||||
__ip_select_ident(iph, dst, 0);
|
||||
}
|
||||
@@ -249,9 +245,9 @@ static inline void ip_select_ident(struct iphdr *iph, struct dst_entry *dst, str
|
||||
static inline void ip_select_ident_more(struct iphdr *iph, struct dst_entry *dst, struct sock *sk, int more)
|
||||
{
|
||||
if (iph->frag_off & htons(IP_DF)) {
|
||||
if (sk && inet_sk(sk)->daddr) {
|
||||
iph->id = htons(inet_sk(sk)->id);
|
||||
inet_sk(sk)->id += 1 + more;
|
||||
if (sk && inet_sk(sk)->inet_daddr) {
|
||||
iph->id = htons(inet_sk(sk)->inet_id);
|
||||
inet_sk(sk)->inet_id += 1 + more;
|
||||
} else
|
||||
iph->id = 0;
|
||||
} else
|
||||
@@ -317,7 +313,7 @@ static inline void ip_ib_mc_map(__be32 naddr, const unsigned char *broadcast, ch
|
||||
|
||||
static __inline__ void inet_reset_saddr(struct sock *sk)
|
||||
{
|
||||
inet_sk(sk)->rcv_saddr = inet_sk(sk)->saddr = 0;
|
||||
inet_sk(sk)->inet_rcv_saddr = inet_sk(sk)->inet_saddr = 0;
|
||||
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
|
||||
if (sk->sk_family == PF_INET6) {
|
||||
struct ipv6_pinfo *np = inet6_sk(sk);
|
||||
@@ -336,8 +332,7 @@ extern int ip_call_ra_chain(struct sk_buff *skb);
|
||||
* Functions provided by ip_fragment.c
|
||||
*/
|
||||
|
||||
enum ip_defrag_users
|
||||
{
|
||||
enum ip_defrag_users {
|
||||
IP_DEFRAG_LOCAL_DELIVER,
|
||||
IP_DEFRAG_CALL_RA_CHAIN,
|
||||
IP_DEFRAG_CONNTRACK_IN,
|
||||
|
@@ -30,8 +30,7 @@
|
||||
|
||||
struct rt6_info;
|
||||
|
||||
struct fib6_config
|
||||
{
|
||||
struct fib6_config {
|
||||
u32 fc_table;
|
||||
u32 fc_metric;
|
||||
int fc_dst_len;
|
||||
@@ -51,8 +50,7 @@ struct fib6_config
|
||||
struct nl_info fc_nlinfo;
|
||||
};
|
||||
|
||||
struct fib6_node
|
||||
{
|
||||
struct fib6_node {
|
||||
struct fib6_node *parent;
|
||||
struct fib6_node *left;
|
||||
struct fib6_node *right;
|
||||
@@ -78,16 +76,14 @@ struct fib6_node
|
||||
*
|
||||
*/
|
||||
|
||||
struct rt6key
|
||||
{
|
||||
struct rt6key {
|
||||
struct in6_addr addr;
|
||||
int plen;
|
||||
};
|
||||
|
||||
struct fib6_table;
|
||||
|
||||
struct rt6_info
|
||||
{
|
||||
struct rt6_info {
|
||||
union {
|
||||
struct dst_entry dst;
|
||||
} u;
|
||||
@@ -127,8 +123,7 @@ static inline struct inet6_dev *ip6_dst_idev(struct dst_entry *dst)
|
||||
return ((struct rt6_info *)dst)->rt6i_idev;
|
||||
}
|
||||
|
||||
struct fib6_walker_t
|
||||
{
|
||||
struct fib6_walker_t {
|
||||
struct fib6_walker_t *prev, *next;
|
||||
struct fib6_node *root, *node;
|
||||
struct rt6_info *leaf;
|
||||
|
@@ -103,8 +103,7 @@ extern void rt6_pmtu_discovery(struct in6_addr *daddr,
|
||||
|
||||
struct netlink_callback;
|
||||
|
||||
struct rt6_rtnl_dump_arg
|
||||
{
|
||||
struct rt6_rtnl_dump_arg {
|
||||
struct sk_buff *skb;
|
||||
struct netlink_callback *cb;
|
||||
struct net *net;
|
||||
|
@@ -144,18 +144,21 @@ struct fib_table {
|
||||
struct hlist_node tb_hlist;
|
||||
u32 tb_id;
|
||||
int tb_default;
|
||||
int (*tb_lookup)(struct fib_table *tb, const struct flowi *flp, struct fib_result *res);
|
||||
int (*tb_insert)(struct fib_table *, struct fib_config *);
|
||||
int (*tb_delete)(struct fib_table *, struct fib_config *);
|
||||
int (*tb_dump)(struct fib_table *table, struct sk_buff *skb,
|
||||
struct netlink_callback *cb);
|
||||
int (*tb_flush)(struct fib_table *table);
|
||||
void (*tb_select_default)(struct fib_table *table,
|
||||
const struct flowi *flp, struct fib_result *res);
|
||||
|
||||
unsigned char tb_data[0];
|
||||
};
|
||||
|
||||
extern int fib_table_lookup(struct fib_table *tb, const struct flowi *flp,
|
||||
struct fib_result *res);
|
||||
extern int fib_table_insert(struct fib_table *, struct fib_config *);
|
||||
extern int fib_table_delete(struct fib_table *, struct fib_config *);
|
||||
extern int fib_table_dump(struct fib_table *table, struct sk_buff *skb,
|
||||
struct netlink_callback *cb);
|
||||
extern int fib_table_flush(struct fib_table *table);
|
||||
extern void fib_table_select_default(struct fib_table *table,
|
||||
const struct flowi *flp,
|
||||
struct fib_result *res);
|
||||
|
||||
|
||||
#ifndef CONFIG_IP_MULTIPLE_TABLES
|
||||
|
||||
#define TABLE_LOCAL_INDEX 0
|
||||
@@ -182,11 +185,11 @@ static inline int fib_lookup(struct net *net, const struct flowi *flp,
|
||||
struct fib_table *table;
|
||||
|
||||
table = fib_get_table(net, RT_TABLE_LOCAL);
|
||||
if (!table->tb_lookup(table, flp, res))
|
||||
if (!fib_table_lookup(table, flp, res))
|
||||
return 0;
|
||||
|
||||
table = fib_get_table(net, RT_TABLE_MAIN);
|
||||
if (!table->tb_lookup(table, flp, res))
|
||||
if (!fib_table_lookup(table, flp, res))
|
||||
return 0;
|
||||
return -ENETUNREACH;
|
||||
}
|
||||
|
@@ -251,8 +251,7 @@ struct ip_vs_estimator {
|
||||
u32 outbps;
|
||||
};
|
||||
|
||||
struct ip_vs_stats
|
||||
{
|
||||
struct ip_vs_stats {
|
||||
struct ip_vs_stats_user ustats; /* statistics */
|
||||
struct ip_vs_estimator est; /* estimator */
|
||||
|
||||
@@ -518,8 +517,7 @@ struct ip_vs_scheduler {
|
||||
/*
|
||||
* The application module object (a.k.a. app incarnation)
|
||||
*/
|
||||
struct ip_vs_app
|
||||
{
|
||||
struct ip_vs_app {
|
||||
struct list_head a_list; /* member in app list */
|
||||
int type; /* IP_VS_APP_TYPE_xxx */
|
||||
char *name; /* application module name */
|
||||
|
@@ -7,8 +7,15 @@
|
||||
/* Keep error state on tunnel for 30 sec */
|
||||
#define IPTUNNEL_ERR_TIMEO (30*HZ)
|
||||
|
||||
struct ip_tunnel
|
||||
{
|
||||
/* 6rd prefix/relay information */
|
||||
struct ip_tunnel_6rd_parm {
|
||||
struct in6_addr prefix;
|
||||
__be32 relay_prefix;
|
||||
u16 prefixlen;
|
||||
u16 relay_prefixlen;
|
||||
};
|
||||
|
||||
struct ip_tunnel {
|
||||
struct ip_tunnel *next;
|
||||
struct net_device *dev;
|
||||
|
||||
@@ -23,15 +30,19 @@ struct ip_tunnel
|
||||
|
||||
struct ip_tunnel_parm parms;
|
||||
|
||||
/* for SIT */
|
||||
#ifdef CONFIG_IPV6_SIT_6RD
|
||||
struct ip_tunnel_6rd_parm ip6rd;
|
||||
#endif
|
||||
struct ip_tunnel_prl_entry *prl; /* potential router list */
|
||||
unsigned int prl_count; /* # of entries in PRL */
|
||||
};
|
||||
|
||||
struct ip_tunnel_prl_entry
|
||||
{
|
||||
struct ip_tunnel_prl_entry {
|
||||
struct ip_tunnel_prl_entry *next;
|
||||
__be32 addr;
|
||||
u16 flags;
|
||||
struct rcu_head rcu_head;
|
||||
};
|
||||
|
||||
#define IPTUNNEL_XMIT() do { \
|
||||
@@ -42,9 +53,9 @@ struct ip_tunnel_prl_entry
|
||||
ip_select_ident(iph, &rt->u.dst, NULL); \
|
||||
\
|
||||
err = ip_local_out(skb); \
|
||||
if (net_xmit_eval(err) == 0) { \
|
||||
stats->tx_bytes += pkt_len; \
|
||||
stats->tx_packets++; \
|
||||
if (likely(net_xmit_eval(err) == 0)) { \
|
||||
txq->tx_bytes += pkt_len; \
|
||||
txq->tx_packets++; \
|
||||
} else { \
|
||||
stats->tx_errors++; \
|
||||
stats->tx_aborted_errors++; \
|
||||
|
@@ -160,8 +160,7 @@ extern struct ctl_path net_ipv6_ctl_path[];
|
||||
#define ICMP6MSGIN_INC_STATS_BH(net, idev, field) \
|
||||
_DEVINC(net, icmpv6msg, _BH, idev, field)
|
||||
|
||||
struct ip6_ra_chain
|
||||
{
|
||||
struct ip6_ra_chain {
|
||||
struct ip6_ra_chain *next;
|
||||
struct sock *sk;
|
||||
int sel;
|
||||
@@ -176,8 +175,7 @@ extern rwlock_t ip6_ra_lock;
|
||||
ancillary data and passed to IPv6.
|
||||
*/
|
||||
|
||||
struct ipv6_txoptions
|
||||
{
|
||||
struct ipv6_txoptions {
|
||||
/* Length of this structure */
|
||||
int tot_len;
|
||||
|
||||
@@ -194,8 +192,7 @@ struct ipv6_txoptions
|
||||
/* Option buffer, as read by IPV6_PKTOPTIONS, starts here. */
|
||||
};
|
||||
|
||||
struct ip6_flowlabel
|
||||
{
|
||||
struct ip6_flowlabel {
|
||||
struct ip6_flowlabel *next;
|
||||
__be32 label;
|
||||
atomic_t users;
|
||||
@@ -212,8 +209,7 @@ struct ip6_flowlabel
|
||||
#define IPV6_FLOWINFO_MASK cpu_to_be32(0x0FFFFFFF)
|
||||
#define IPV6_FLOWLABEL_MASK cpu_to_be32(0x000FFFFF)
|
||||
|
||||
struct ipv6_fl_socklist
|
||||
{
|
||||
struct ipv6_fl_socklist {
|
||||
struct ipv6_fl_socklist *next;
|
||||
struct ip6_flowlabel *fl;
|
||||
};
|
||||
|
@@ -300,8 +300,7 @@
|
||||
* This struct is also my long term insurance. I can add new fields here
|
||||
* without breaking the prototype of iw_handler...
|
||||
*/
|
||||
struct iw_request_info
|
||||
{
|
||||
struct iw_request_info {
|
||||
__u16 cmd; /* Wireless Extension command */
|
||||
__u16 flags; /* More to come ;-) */
|
||||
};
|
||||
@@ -321,20 +320,20 @@ typedef int (*iw_handler)(struct net_device *dev, struct iw_request_info *info,
|
||||
* shared by all driver instances... Same for the members...
|
||||
* This will be linked from net_device in <linux/netdevice.h>
|
||||
*/
|
||||
struct iw_handler_def
|
||||
{
|
||||
/* Number of handlers defined (more precisely, index of the
|
||||
* last defined handler + 1) */
|
||||
__u16 num_standard;
|
||||
__u16 num_private;
|
||||
/* Number of private arg description */
|
||||
__u16 num_private_args;
|
||||
struct iw_handler_def {
|
||||
|
||||
/* Array of handlers for standard ioctls
|
||||
* We will call dev->wireless_handlers->standard[ioctl - SIOCSIWCOMMIT]
|
||||
*/
|
||||
const iw_handler * standard;
|
||||
/* Number of handlers defined (more precisely, index of the
|
||||
* last defined handler + 1) */
|
||||
__u16 num_standard;
|
||||
|
||||
#ifdef CONFIG_WEXT_PRIV
|
||||
__u16 num_private;
|
||||
/* Number of private arg description */
|
||||
__u16 num_private_args;
|
||||
/* Array of handlers for private ioctls
|
||||
* Will call dev->wireless_handlers->private[ioctl - SIOCIWFIRSTPRIV]
|
||||
*/
|
||||
@@ -344,6 +343,7 @@ struct iw_handler_def
|
||||
* can put it in any order you want and should not leave holes...
|
||||
* We will automatically export that to user space... */
|
||||
const struct iw_priv_args * private_args;
|
||||
#endif
|
||||
|
||||
/* New location of get_wireless_stats, to de-bloat struct net_device.
|
||||
* The old pointer in struct net_device will be gradually phased
|
||||
@@ -370,8 +370,7 @@ struct iw_handler_def
|
||||
/*
|
||||
* Describe how a standard IOCTL looks like.
|
||||
*/
|
||||
struct iw_ioctl_description
|
||||
{
|
||||
struct iw_ioctl_description {
|
||||
__u8 header_type; /* NULL, iw_point or other */
|
||||
__u8 token_type; /* Future */
|
||||
__u16 token_size; /* Granularity of payload */
|
||||
@@ -393,8 +392,7 @@ struct iw_ioctl_description
|
||||
/*
|
||||
* Instance specific spy data, i.e. addresses spied and quality for them.
|
||||
*/
|
||||
struct iw_spy_data
|
||||
{
|
||||
struct iw_spy_data {
|
||||
/* --- Standard spy support --- */
|
||||
int spy_number;
|
||||
u_char spy_address[IW_MAX_SPY][ETH_ALEN];
|
||||
|
@@ -219,7 +219,7 @@ struct ieee80211_bss_conf {
|
||||
*
|
||||
* These flags are used with the @flags member of &ieee80211_tx_info.
|
||||
*
|
||||
* @IEEE80211_TX_CTL_REQ_TX_STATUS: request TX status callback for this frame.
|
||||
* @IEEE80211_TX_CTL_REQ_TX_STATUS: require TX status callback for this frame.
|
||||
* @IEEE80211_TX_CTL_ASSIGN_SEQ: The driver has to assign a sequence
|
||||
* number to this frame, taking care of not overwriting the fragment
|
||||
* number and increasing the sequence number only when the
|
||||
@@ -390,10 +390,12 @@ struct ieee80211_tx_rate {
|
||||
* @control: union for control data
|
||||
* @status: union for status data
|
||||
* @driver_data: array of driver_data pointers
|
||||
* @ampdu_ack_len: number of aggregated frames.
|
||||
* @ampdu_ack_len: number of acked aggregated frames.
|
||||
* relevant only if IEEE80211_TX_STATUS_AMPDU was set.
|
||||
* @ampdu_ack_map: block ack bit map for the aggregation.
|
||||
* relevant only if IEEE80211_TX_STATUS_AMPDU was set.
|
||||
* @ampdu_len: number of aggregated frames.
|
||||
* relevant only if IEEE80211_TX_STATUS_AMPDU was set.
|
||||
* @ack_signal: signal strength of the ACK frame
|
||||
*/
|
||||
struct ieee80211_tx_info {
|
||||
@@ -428,7 +430,8 @@ struct ieee80211_tx_info {
|
||||
u8 ampdu_ack_len;
|
||||
u64 ampdu_ack_map;
|
||||
int ack_signal;
|
||||
/* 8 bytes free */
|
||||
u8 ampdu_len;
|
||||
/* 7 bytes free */
|
||||
} status;
|
||||
struct {
|
||||
struct ieee80211_tx_rate driver_rates[
|
||||
@@ -494,7 +497,6 @@ ieee80211_tx_info_clear_status(struct ieee80211_tx_info *info)
|
||||
* @RX_FLAG_MMIC_ERROR: Michael MIC error was reported on this frame.
|
||||
* Use together with %RX_FLAG_MMIC_STRIPPED.
|
||||
* @RX_FLAG_DECRYPTED: This frame was decrypted in hardware.
|
||||
* @RX_FLAG_RADIOTAP: This frame starts with a radiotap header.
|
||||
* @RX_FLAG_MMIC_STRIPPED: the Michael MIC is stripped off this frame,
|
||||
* verification has been done by the hardware.
|
||||
* @RX_FLAG_IV_STRIPPED: The IV/ICV are stripped from this frame.
|
||||
@@ -511,11 +513,13 @@ ieee80211_tx_info_clear_status(struct ieee80211_tx_info *info)
|
||||
* @RX_FLAG_HT: HT MCS was used and rate_idx is MCS index
|
||||
* @RX_FLAG_40MHZ: HT40 (40 MHz) was used
|
||||
* @RX_FLAG_SHORT_GI: Short guard interval was used
|
||||
* @RX_FLAG_INTERNAL_CMTR: set internally after frame was reported
|
||||
* on cooked monitor to avoid double-reporting it for multiple
|
||||
* virtual interfaces
|
||||
*/
|
||||
enum mac80211_rx_flags {
|
||||
RX_FLAG_MMIC_ERROR = 1<<0,
|
||||
RX_FLAG_DECRYPTED = 1<<1,
|
||||
RX_FLAG_RADIOTAP = 1<<2,
|
||||
RX_FLAG_MMIC_STRIPPED = 1<<3,
|
||||
RX_FLAG_IV_STRIPPED = 1<<4,
|
||||
RX_FLAG_FAILED_FCS_CRC = 1<<5,
|
||||
@@ -525,6 +529,7 @@ enum mac80211_rx_flags {
|
||||
RX_FLAG_HT = 1<<9,
|
||||
RX_FLAG_40MHZ = 1<<10,
|
||||
RX_FLAG_SHORT_GI = 1<<11,
|
||||
RX_FLAG_INTERNAL_CMTR = 1<<12,
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -554,7 +559,7 @@ struct ieee80211_rx_status {
|
||||
int freq;
|
||||
int signal;
|
||||
int noise;
|
||||
int qual;
|
||||
int __deprecated qual;
|
||||
int antenna;
|
||||
int rate_idx;
|
||||
int flag;
|
||||
@@ -565,7 +570,9 @@ struct ieee80211_rx_status {
|
||||
*
|
||||
* Flags to define PHY configuration options
|
||||
*
|
||||
* @IEEE80211_CONF_RADIOTAP: add radiotap header at receive time (if supported)
|
||||
* @IEEE80211_CONF_MONITOR: there's a monitor interface present -- use this
|
||||
* to determine for example whether to calculate timestamps for packets
|
||||
* or not, do not use instead of filter flags!
|
||||
* @IEEE80211_CONF_PS: Enable 802.11 power save mode (managed mode only)
|
||||
* @IEEE80211_CONF_IDLE: The device is running, but idle; if the flag is set
|
||||
* the driver should be prepared to handle configuration requests but
|
||||
@@ -574,7 +581,7 @@ struct ieee80211_rx_status {
|
||||
* it can also be unset in that case when monitor interfaces are active.
|
||||
*/
|
||||
enum ieee80211_conf_flags {
|
||||
IEEE80211_CONF_RADIOTAP = (1<<0),
|
||||
IEEE80211_CONF_MONITOR = (1<<0),
|
||||
IEEE80211_CONF_PS = (1<<1),
|
||||
IEEE80211_CONF_IDLE = (1<<2),
|
||||
};
|
||||
@@ -584,7 +591,7 @@ enum ieee80211_conf_flags {
|
||||
* enum ieee80211_conf_changed - denotes which configuration changed
|
||||
*
|
||||
* @IEEE80211_CONF_CHANGE_LISTEN_INTERVAL: the listen interval changed
|
||||
* @IEEE80211_CONF_CHANGE_RADIOTAP: the radiotap flag changed
|
||||
* @IEEE80211_CONF_CHANGE_MONITOR: the monitor flag changed
|
||||
* @IEEE80211_CONF_CHANGE_PS: the PS flag or dynamic PS timeout changed
|
||||
* @IEEE80211_CONF_CHANGE_POWER: the TX power changed
|
||||
* @IEEE80211_CONF_CHANGE_CHANNEL: the channel/channel_type changed
|
||||
@@ -593,7 +600,7 @@ enum ieee80211_conf_flags {
|
||||
*/
|
||||
enum ieee80211_conf_changed {
|
||||
IEEE80211_CONF_CHANGE_LISTEN_INTERVAL = BIT(2),
|
||||
IEEE80211_CONF_CHANGE_RADIOTAP = BIT(3),
|
||||
IEEE80211_CONF_CHANGE_MONITOR = BIT(3),
|
||||
IEEE80211_CONF_CHANGE_PS = BIT(4),
|
||||
IEEE80211_CONF_CHANGE_POWER = BIT(5),
|
||||
IEEE80211_CONF_CHANGE_CHANNEL = BIT(6),
|
||||
@@ -852,6 +859,19 @@ enum ieee80211_tkip_key_type {
|
||||
* any particular flags. There are some exceptions to this rule,
|
||||
* however, so you are advised to review these flags carefully.
|
||||
*
|
||||
* @IEEE80211_HW_HAS_RATE_CONTROL:
|
||||
* The hardware or firmware includes rate control, and cannot be
|
||||
* controlled by the stack. As such, no rate control algorithm
|
||||
* should be instantiated, and the TX rate reported to userspace
|
||||
* will be taken from the TX status instead of the rate control
|
||||
* algorithm.
|
||||
* Note that this requires that the driver implement a number of
|
||||
* callbacks so it has the correct information, it needs to have
|
||||
* the @set_rts_threshold callback and must look at the BSS config
|
||||
* @use_cts_prot for G/N protection, @use_short_slot for slot
|
||||
* timing in 2.4 GHz and @use_short_preamble for preambles for
|
||||
* CCK frames.
|
||||
*
|
||||
* @IEEE80211_HW_RX_INCLUDES_FCS:
|
||||
* Indicates that received frames passed to the stack include
|
||||
* the FCS at the end.
|
||||
@@ -910,6 +930,7 @@ enum ieee80211_tkip_key_type {
|
||||
* avoid waking up cpu.
|
||||
*/
|
||||
enum ieee80211_hw_flags {
|
||||
IEEE80211_HW_HAS_RATE_CONTROL = 1<<0,
|
||||
IEEE80211_HW_RX_INCLUDES_FCS = 1<<1,
|
||||
IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING = 1<<2,
|
||||
IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE = 1<<3,
|
||||
@@ -1511,6 +1532,7 @@ struct ieee80211_ops {
|
||||
void (*reset_tsf)(struct ieee80211_hw *hw);
|
||||
int (*tx_last_beacon)(struct ieee80211_hw *hw);
|
||||
int (*ampdu_action)(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
enum ieee80211_ampdu_mlme_action action,
|
||||
struct ieee80211_sta *sta, u16 tid, u16 *ssn);
|
||||
|
||||
@@ -1667,15 +1689,14 @@ void ieee80211_restart_hw(struct ieee80211_hw *hw);
|
||||
* ieee80211_rx - receive frame
|
||||
*
|
||||
* Use this function to hand received frames to mac80211. The receive
|
||||
* buffer in @skb must start with an IEEE 802.11 header or a radiotap
|
||||
* header if %RX_FLAG_RADIOTAP is set in the @status flags.
|
||||
* buffer in @skb must start with an IEEE 802.11 header.
|
||||
*
|
||||
* This function may not be called in IRQ context. Calls to this function
|
||||
* for a single hardware must be synchronized against each other. Calls
|
||||
* to this function and ieee80211_rx_irqsafe() may not be mixed for a
|
||||
* single hardware.
|
||||
* for a single hardware must be synchronized against each other. Calls to
|
||||
* this function, ieee80211_rx_ni() and ieee80211_rx_irqsafe() may not be
|
||||
* mixed for a single hardware.
|
||||
*
|
||||
* Note that right now, this function must be called with softirqs disabled.
|
||||
* In process context use instead ieee80211_rx_ni().
|
||||
*
|
||||
* @hw: the hardware this frame came in on
|
||||
* @skb: the buffer to receive, owned by mac80211 after this call
|
||||
@@ -1688,14 +1709,34 @@ void ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb);
|
||||
* Like ieee80211_rx() but can be called in IRQ context
|
||||
* (internally defers to a tasklet.)
|
||||
*
|
||||
* Calls to this function and ieee80211_rx() may not be mixed for a
|
||||
* single hardware.
|
||||
* Calls to this function, ieee80211_rx() or ieee80211_rx_ni() may not
|
||||
* be mixed for a single hardware.
|
||||
*
|
||||
* @hw: the hardware this frame came in on
|
||||
* @skb: the buffer to receive, owned by mac80211 after this call
|
||||
*/
|
||||
void ieee80211_rx_irqsafe(struct ieee80211_hw *hw, struct sk_buff *skb);
|
||||
|
||||
/**
|
||||
* ieee80211_rx_ni - receive frame (in process context)
|
||||
*
|
||||
* Like ieee80211_rx() but can be called in process context
|
||||
* (internally disables bottom halves).
|
||||
*
|
||||
* Calls to this function, ieee80211_rx() and ieee80211_rx_irqsafe() may
|
||||
* not be mixed for a single hardware.
|
||||
*
|
||||
* @hw: the hardware this frame came in on
|
||||
* @skb: the buffer to receive, owned by mac80211 after this call
|
||||
*/
|
||||
static inline void ieee80211_rx_ni(struct ieee80211_hw *hw,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
local_bh_disable();
|
||||
ieee80211_rx(hw, skb);
|
||||
local_bh_enable();
|
||||
}
|
||||
|
||||
/**
|
||||
* ieee80211_tx_status - transmit status callback
|
||||
*
|
||||
@@ -1729,20 +1770,46 @@ void ieee80211_tx_status(struct ieee80211_hw *hw,
|
||||
void ieee80211_tx_status_irqsafe(struct ieee80211_hw *hw,
|
||||
struct sk_buff *skb);
|
||||
|
||||
/**
|
||||
* ieee80211_beacon_get_tim - beacon generation function
|
||||
* @hw: pointer obtained from ieee80211_alloc_hw().
|
||||
* @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf.
|
||||
* @tim_offset: pointer to variable that will receive the TIM IE offset.
|
||||
* Set to 0 if invalid (in non-AP modes).
|
||||
* @tim_length: pointer to variable that will receive the TIM IE length,
|
||||
* (including the ID and length bytes!).
|
||||
* Set to 0 if invalid (in non-AP modes).
|
||||
*
|
||||
* If the driver implements beaconing modes, it must use this function to
|
||||
* obtain the beacon frame/template.
|
||||
*
|
||||
* If the beacon frames are generated by the host system (i.e., not in
|
||||
* hardware/firmware), the driver uses this function to get each beacon
|
||||
* frame from mac80211 -- it is responsible for calling this function
|
||||
* before the beacon is needed (e.g. based on hardware interrupt).
|
||||
*
|
||||
* If the beacon frames are generated by the device, then the driver
|
||||
* must use the returned beacon as the template and change the TIM IE
|
||||
* according to the current DTIM parameters/TIM bitmap.
|
||||
*
|
||||
* The driver is responsible for freeing the returned skb.
|
||||
*/
|
||||
struct sk_buff *ieee80211_beacon_get_tim(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
u16 *tim_offset, u16 *tim_length);
|
||||
|
||||
/**
|
||||
* ieee80211_beacon_get - beacon generation function
|
||||
* @hw: pointer obtained from ieee80211_alloc_hw().
|
||||
* @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf.
|
||||
*
|
||||
* If the beacon frames are generated by the host system (i.e., not in
|
||||
* hardware/firmware), the low-level driver uses this function to receive
|
||||
* the next beacon frame from the 802.11 code. The low-level is responsible
|
||||
* for calling this function before beacon data is needed (e.g., based on
|
||||
* hardware interrupt). Returned skb is used only once and low-level driver
|
||||
* is responsible for freeing it.
|
||||
* See ieee80211_beacon_get_tim().
|
||||
*/
|
||||
struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif);
|
||||
static inline struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif)
|
||||
{
|
||||
return ieee80211_beacon_get_tim(hw, vif, NULL, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* ieee80211_rts_get - RTS frame generation function
|
||||
@@ -1987,8 +2054,7 @@ void ieee80211_queue_delayed_work(struct ieee80211_hw *hw,
|
||||
|
||||
/**
|
||||
* ieee80211_start_tx_ba_session - Start a tx Block Ack session.
|
||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||
* @ra: receiver address of the BA session recipient
|
||||
* @sta: the station for which to start a BA session
|
||||
* @tid: the TID to BA on.
|
||||
*
|
||||
* Return: success if addBA request was sent, failure otherwise
|
||||
@@ -1997,22 +2063,22 @@ void ieee80211_queue_delayed_work(struct ieee80211_hw *hw,
|
||||
* the need to start aggregation on a certain RA/TID, the session level
|
||||
* will be managed by the mac80211.
|
||||
*/
|
||||
int ieee80211_start_tx_ba_session(struct ieee80211_hw *hw, u8 *ra, u16 tid);
|
||||
int ieee80211_start_tx_ba_session(struct ieee80211_sta *sta, u16 tid);
|
||||
|
||||
/**
|
||||
* ieee80211_start_tx_ba_cb - low level driver ready to aggregate.
|
||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||
* @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf
|
||||
* @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_hw *hw, u8 *ra, u16 tid);
|
||||
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.
|
||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||
* @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf
|
||||
* @ra: receiver address of the BA session recipient.
|
||||
* @tid: the TID to BA on.
|
||||
*
|
||||
@@ -2020,13 +2086,12 @@ void ieee80211_start_tx_ba_cb(struct ieee80211_hw *hw, u8 *ra, u16 tid);
|
||||
* finished with preparations for the BA session.
|
||||
* This version of the function is IRQ-safe.
|
||||
*/
|
||||
void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_hw *hw, const u8 *ra,
|
||||
void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra,
|
||||
u16 tid);
|
||||
|
||||
/**
|
||||
* ieee80211_stop_tx_ba_session - Stop a Block Ack session.
|
||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||
* @ra: receiver address of the BA session recipient
|
||||
* @sta: the station whose BA session to stop
|
||||
* @tid: the TID to stop BA.
|
||||
* @initiator: if indicates initiator DELBA frame will be sent.
|
||||
*
|
||||
@@ -2036,24 +2101,23 @@ void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_hw *hw, const u8 *ra,
|
||||
* 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_hw *hw,
|
||||
u8 *ra, u16 tid,
|
||||
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.
|
||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||
* @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf
|
||||
* @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_hw *hw, u8 *ra, u8 tid);
|
||||
void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid);
|
||||
|
||||
/**
|
||||
* ieee80211_stop_tx_ba_cb_irqsafe - low level driver ready to stop aggregate.
|
||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||
* @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf
|
||||
* @ra: receiver address of the BA session recipient.
|
||||
* @tid: the desired TID to BA on.
|
||||
*
|
||||
@@ -2061,20 +2125,73 @@ void ieee80211_stop_tx_ba_cb(struct ieee80211_hw *hw, u8 *ra, u8 tid);
|
||||
* finished with preparations for the BA session tear down.
|
||||
* This version of the function is IRQ-safe.
|
||||
*/
|
||||
void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_hw *hw, const u8 *ra,
|
||||
void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra,
|
||||
u16 tid);
|
||||
|
||||
/**
|
||||
* ieee80211_find_sta - find a station
|
||||
*
|
||||
* @vif: virtual interface to look for station on
|
||||
* @addr: station's address
|
||||
*
|
||||
* This function must be called under RCU lock and the
|
||||
* resulting pointer is only valid under RCU lock as well.
|
||||
*/
|
||||
struct ieee80211_sta *ieee80211_find_sta(struct ieee80211_vif *vif,
|
||||
const u8 *addr);
|
||||
|
||||
/**
|
||||
* ieee80211_find_sta_by_hw - find a station on hardware
|
||||
*
|
||||
* @hw: pointer as obtained from ieee80211_alloc_hw()
|
||||
* @addr: station's address
|
||||
*
|
||||
* This function must be called under RCU lock and the
|
||||
* resulting pointer is only valid under RCU lock as well.
|
||||
*
|
||||
* NOTE: This function should not be used! When mac80211 is converted
|
||||
* internally to properly keep track of stations on multiple
|
||||
* virtual interfaces, it will not always know which station to
|
||||
* return here since a single address might be used by multiple
|
||||
* logical stations (e.g. consider a station connecting to another
|
||||
* BSSID on the same AP hardware without disconnecting first).
|
||||
*
|
||||
* DO NOT USE THIS FUNCTION.
|
||||
*/
|
||||
struct ieee80211_sta *ieee80211_find_sta(struct ieee80211_hw *hw,
|
||||
const u8 *addr);
|
||||
struct ieee80211_sta *ieee80211_find_sta_by_hw(struct ieee80211_hw *hw,
|
||||
const u8 *addr);
|
||||
|
||||
/**
|
||||
* ieee80211_sta_block_awake - block station from waking up
|
||||
* @hw: the hardware
|
||||
* @pubsta: the station
|
||||
* @block: whether to block or unblock
|
||||
*
|
||||
* Some devices require that all frames that are on the queues
|
||||
* for a specific station that went to sleep are flushed before
|
||||
* a poll response or frames after the station woke up can be
|
||||
* delivered to that it. Note that such frames must be rejected
|
||||
* by the driver as filtered, with the appropriate status flag.
|
||||
*
|
||||
* This function allows implementing this mode in a race-free
|
||||
* manner.
|
||||
*
|
||||
* To do this, a driver must keep track of the number of frames
|
||||
* still enqueued for a specific station. If this number is not
|
||||
* zero when the station goes to sleep, the driver must call
|
||||
* this function to force mac80211 to consider the station to
|
||||
* be asleep regardless of the station's actual state. Once the
|
||||
* number of outstanding frames reaches zero, the driver must
|
||||
* call this function again to unblock the station. That will
|
||||
* cause mac80211 to be able to send ps-poll responses, and if
|
||||
* the station queried in the meantime then frames will also
|
||||
* be sent out as a result of this. Additionally, the driver
|
||||
* will be notified that the station woke up some time after
|
||||
* it is unblocked, regardless of whether the station actually
|
||||
* woke up while blocked or not.
|
||||
*/
|
||||
void ieee80211_sta_block_awake(struct ieee80211_hw *hw,
|
||||
struct ieee80211_sta *pubsta, bool block);
|
||||
|
||||
/**
|
||||
* ieee80211_beacon_loss - inform hardware does not receive beacons
|
||||
|
@@ -37,8 +37,7 @@
|
||||
|
||||
struct neighbour;
|
||||
|
||||
struct neigh_parms
|
||||
{
|
||||
struct neigh_parms {
|
||||
#ifdef CONFIG_NET_NS
|
||||
struct net *net;
|
||||
#endif
|
||||
@@ -70,8 +69,7 @@ struct neigh_parms
|
||||
int locktime;
|
||||
};
|
||||
|
||||
struct neigh_statistics
|
||||
{
|
||||
struct neigh_statistics {
|
||||
unsigned long allocs; /* number of allocated neighs */
|
||||
unsigned long destroys; /* number of destroyed neighs */
|
||||
unsigned long hash_grows; /* number of hash resizes */
|
||||
@@ -97,8 +95,7 @@ struct neigh_statistics
|
||||
preempt_enable(); \
|
||||
} while (0)
|
||||
|
||||
struct neighbour
|
||||
{
|
||||
struct neighbour {
|
||||
struct neighbour *next;
|
||||
struct neigh_table *tbl;
|
||||
struct neigh_parms *parms;
|
||||
@@ -122,8 +119,7 @@ struct neighbour
|
||||
u8 primary_key[0];
|
||||
};
|
||||
|
||||
struct neigh_ops
|
||||
{
|
||||
struct neigh_ops {
|
||||
int family;
|
||||
void (*solicit)(struct neighbour *, struct sk_buff*);
|
||||
void (*error_report)(struct neighbour *, struct sk_buff*);
|
||||
@@ -133,8 +129,7 @@ struct neigh_ops
|
||||
int (*queue_xmit)(struct sk_buff*);
|
||||
};
|
||||
|
||||
struct pneigh_entry
|
||||
{
|
||||
struct pneigh_entry {
|
||||
struct pneigh_entry *next;
|
||||
#ifdef CONFIG_NET_NS
|
||||
struct net *net;
|
||||
@@ -149,8 +144,7 @@ struct pneigh_entry
|
||||
*/
|
||||
|
||||
|
||||
struct neigh_table
|
||||
{
|
||||
struct neigh_table {
|
||||
struct neigh_table *next;
|
||||
int family;
|
||||
int entry_size;
|
||||
|
@@ -28,6 +28,10 @@ struct ctl_table_header;
|
||||
struct net_generic;
|
||||
struct sock;
|
||||
|
||||
|
||||
#define NETDEV_HASHBITS 8
|
||||
#define NETDEV_HASHENTRIES (1 << NETDEV_HASHBITS)
|
||||
|
||||
struct net {
|
||||
atomic_t count; /* To decided when the network
|
||||
* namespace should be freed.
|
||||
@@ -38,7 +42,8 @@ struct net {
|
||||
*/
|
||||
#endif
|
||||
struct list_head list; /* list of network namespaces */
|
||||
struct work_struct work; /* work struct for freeing */
|
||||
struct list_head cleanup_list; /* namespaces on death row */
|
||||
struct list_head exit_list; /* Use only net_mutex */
|
||||
|
||||
struct proc_dir_entry *proc_net;
|
||||
struct proc_dir_entry *proc_net_stat;
|
||||
@@ -80,7 +85,7 @@ struct net {
|
||||
#ifdef CONFIG_XFRM
|
||||
struct netns_xfrm xfrm;
|
||||
#endif
|
||||
#ifdef CONFIG_WIRELESS_EXT
|
||||
#ifdef CONFIG_WEXT_CORE
|
||||
struct sk_buff_head wext_nlevents;
|
||||
#endif
|
||||
struct net_generic *gen;
|
||||
@@ -232,6 +237,9 @@ struct pernet_operations {
|
||||
struct list_head list;
|
||||
int (*init)(struct net *net);
|
||||
void (*exit)(struct net *net);
|
||||
void (*exit_batch)(struct list_head *net_exit_list);
|
||||
int *id;
|
||||
size_t size;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -255,12 +263,8 @@ struct pernet_operations {
|
||||
*/
|
||||
extern int register_pernet_subsys(struct pernet_operations *);
|
||||
extern void unregister_pernet_subsys(struct pernet_operations *);
|
||||
extern int register_pernet_gen_subsys(int *id, struct pernet_operations *);
|
||||
extern void unregister_pernet_gen_subsys(int id, struct pernet_operations *);
|
||||
extern int register_pernet_device(struct pernet_operations *);
|
||||
extern void unregister_pernet_device(struct pernet_operations *);
|
||||
extern int register_pernet_gen_device(int *id, struct pernet_operations *);
|
||||
extern void unregister_pernet_gen_device(int id, struct pernet_operations *);
|
||||
|
||||
struct ctl_path;
|
||||
struct ctl_table;
|
||||
|
@@ -13,8 +13,7 @@
|
||||
#include <net/netfilter/nf_conntrack_extend.h>
|
||||
|
||||
/* Connection tracking event types */
|
||||
enum ip_conntrack_events
|
||||
{
|
||||
enum ip_conntrack_events {
|
||||
IPCT_NEW = 0, /* new conntrack */
|
||||
IPCT_RELATED = 1, /* related conntrack */
|
||||
IPCT_DESTROY = 2, /* destroyed conntrack */
|
||||
|
@@ -9,8 +9,7 @@
|
||||
extern unsigned int nf_ct_expect_hsize;
|
||||
extern unsigned int nf_ct_expect_max;
|
||||
|
||||
struct nf_conntrack_expect
|
||||
{
|
||||
struct nf_conntrack_expect {
|
||||
/* Conntrack expectation list member */
|
||||
struct hlist_node lnode;
|
||||
|
||||
@@ -64,8 +63,7 @@ static inline struct net *nf_ct_exp_net(struct nf_conntrack_expect *exp)
|
||||
#endif
|
||||
}
|
||||
|
||||
struct nf_conntrack_expect_policy
|
||||
{
|
||||
struct nf_conntrack_expect_policy {
|
||||
unsigned int max_expected;
|
||||
unsigned int timeout;
|
||||
};
|
||||
|
@@ -3,8 +3,7 @@
|
||||
|
||||
#include <net/netfilter/nf_conntrack.h>
|
||||
|
||||
enum nf_ct_ext_id
|
||||
{
|
||||
enum nf_ct_ext_id {
|
||||
NF_CT_EXT_HELPER,
|
||||
NF_CT_EXT_NAT,
|
||||
NF_CT_EXT_ACCT,
|
||||
@@ -65,8 +64,7 @@ __nf_ct_ext_add(struct nf_conn *ct, enum nf_ct_ext_id id, gfp_t gfp);
|
||||
|
||||
#define NF_CT_EXT_F_PREALLOC 0x0001
|
||||
|
||||
struct nf_ct_ext_type
|
||||
{
|
||||
struct nf_ct_ext_type {
|
||||
/* Destroys relationships (can be NULL). */
|
||||
void (*destroy)(struct nf_conn *ct);
|
||||
/* Called when realloacted (can be NULL).
|
||||
|
@@ -16,8 +16,7 @@ struct module;
|
||||
|
||||
#define NF_CT_HELPER_NAME_LEN 16
|
||||
|
||||
struct nf_conntrack_helper
|
||||
{
|
||||
struct nf_conntrack_helper {
|
||||
struct hlist_node hnode; /* Internal use. */
|
||||
|
||||
const char *name; /* name of the module */
|
||||
|
@@ -16,8 +16,7 @@
|
||||
#include <linux/seq_file.h>
|
||||
#include <net/netfilter/nf_conntrack.h>
|
||||
|
||||
struct nf_conntrack_l3proto
|
||||
{
|
||||
struct nf_conntrack_l3proto {
|
||||
/* L3 Protocol Family number. ex) PF_INET */
|
||||
u_int16_t l3proto;
|
||||
|
||||
|
@@ -15,8 +15,7 @@
|
||||
|
||||
struct seq_file;
|
||||
|
||||
struct nf_conntrack_l4proto
|
||||
{
|
||||
struct nf_conntrack_l4proto {
|
||||
/* L3 Protocol number. */
|
||||
u_int16_t l3proto;
|
||||
|
||||
|
@@ -26,8 +26,7 @@
|
||||
|
||||
/* The protocol-specific manipulable parts of the tuple: always in
|
||||
network order! */
|
||||
union nf_conntrack_man_proto
|
||||
{
|
||||
union nf_conntrack_man_proto {
|
||||
/* Add other protocols here. */
|
||||
__be16 all;
|
||||
|
||||
@@ -52,8 +51,7 @@ union nf_conntrack_man_proto
|
||||
};
|
||||
|
||||
/* The manipulable part of the tuple. */
|
||||
struct nf_conntrack_man
|
||||
{
|
||||
struct nf_conntrack_man {
|
||||
union nf_inet_addr u3;
|
||||
union nf_conntrack_man_proto u;
|
||||
/* Layer 3 protocol */
|
||||
@@ -61,8 +59,7 @@ struct nf_conntrack_man
|
||||
};
|
||||
|
||||
/* This contains the information to distinguish a connection. */
|
||||
struct nf_conntrack_tuple
|
||||
{
|
||||
struct nf_conntrack_tuple {
|
||||
struct nf_conntrack_man src;
|
||||
|
||||
/* These are the parts of the tuple which are fixed. */
|
||||
@@ -100,8 +97,7 @@ struct nf_conntrack_tuple
|
||||
} dst;
|
||||
};
|
||||
|
||||
struct nf_conntrack_tuple_mask
|
||||
{
|
||||
struct nf_conntrack_tuple_mask {
|
||||
struct {
|
||||
union nf_inet_addr u3;
|
||||
union nf_conntrack_man_proto u;
|
||||
|
@@ -5,8 +5,7 @@
|
||||
|
||||
#define NF_NAT_MAPPING_TYPE_MAX_NAMELEN 16
|
||||
|
||||
enum nf_nat_manip_type
|
||||
{
|
||||
enum nf_nat_manip_type {
|
||||
IP_NAT_MANIP_SRC,
|
||||
IP_NAT_MANIP_DST
|
||||
};
|
||||
@@ -30,8 +29,7 @@ struct nf_nat_seq {
|
||||
};
|
||||
|
||||
/* Single range specification. */
|
||||
struct nf_nat_range
|
||||
{
|
||||
struct nf_nat_range {
|
||||
/* Set to OR of flags above. */
|
||||
unsigned int flags;
|
||||
|
||||
@@ -43,8 +41,7 @@ struct nf_nat_range
|
||||
};
|
||||
|
||||
/* For backwards compat: don't use in modern code. */
|
||||
struct nf_nat_multi_range_compat
|
||||
{
|
||||
struct nf_nat_multi_range_compat {
|
||||
unsigned int rangesize; /* Must be 1. */
|
||||
|
||||
/* hangs off end. */
|
||||
@@ -57,8 +54,7 @@ struct nf_nat_multi_range_compat
|
||||
#include <net/netfilter/nf_conntrack_extend.h>
|
||||
|
||||
/* per conntrack: nat application helper private data */
|
||||
union nf_conntrack_nat_help
|
||||
{
|
||||
union nf_conntrack_nat_help {
|
||||
/* insert nat helper private data here */
|
||||
struct nf_nat_pptp nat_pptp_info;
|
||||
};
|
||||
@@ -66,8 +62,7 @@ union nf_conntrack_nat_help
|
||||
struct nf_conn;
|
||||
|
||||
/* The structure embedded in the conntrack structure. */
|
||||
struct nf_conn_nat
|
||||
{
|
||||
struct nf_conn_nat {
|
||||
struct hlist_node bysource;
|
||||
struct nf_nat_seq seq[IP_CT_DIR_MAX];
|
||||
struct nf_conn *ct;
|
||||
|
@@ -6,8 +6,7 @@
|
||||
|
||||
struct nf_nat_range;
|
||||
|
||||
struct nf_nat_protocol
|
||||
{
|
||||
struct nf_nat_protocol {
|
||||
/* Protocol number. */
|
||||
unsigned int protonum;
|
||||
|
||||
|
@@ -12,9 +12,11 @@
|
||||
* stuff on the struct net without explicit struct net modification
|
||||
*
|
||||
* The rules are simple:
|
||||
* 1. register the ops with register_pernet_gen_device to get the id
|
||||
* of your private pointer;
|
||||
* 2. call net_assign_generic() to put the private data on the struct
|
||||
* 1. set pernet_operations->id. After register_pernet_device you
|
||||
* will have the id of your private pointer.
|
||||
* 2. Either set pernet_operations->size (to have the code allocate and
|
||||
* free a private structure pointed to from struct net ) or
|
||||
* call net_assign_generic() to put the private data on the struct
|
||||
* net (most preferably this should be done in the ->init callback
|
||||
* of the ops registered);
|
||||
* 3. do not change this pointer while the net is alive;
|
||||
|
@@ -43,6 +43,7 @@ struct netns_xfrm {
|
||||
struct work_struct policy_hash_work;
|
||||
|
||||
struct sock *nlsk;
|
||||
struct sock *nlsk_stash;
|
||||
|
||||
u32 sysctl_aevent_etime;
|
||||
u32 sysctl_aevent_rseqth;
|
||||
|
@@ -46,7 +46,9 @@ static inline struct pn_sock *pn_sk(struct sock *sk)
|
||||
|
||||
extern const struct proto_ops phonet_dgram_ops;
|
||||
|
||||
void pn_sock_init(void);
|
||||
struct sock *pn_find_sock_by_sa(struct net *net, const struct sockaddr_pn *sa);
|
||||
void pn_deliver_sock_broadcast(struct net *net, struct sk_buff *skb);
|
||||
void phonet_get_local_port_range(int *min, int *max);
|
||||
void pn_sock_hash(struct sock *sk);
|
||||
void pn_sock_unhash(struct sock *sk);
|
||||
|
@@ -25,7 +25,7 @@
|
||||
|
||||
struct phonet_device_list {
|
||||
struct list_head list;
|
||||
spinlock_t lock;
|
||||
struct mutex lock;
|
||||
};
|
||||
|
||||
struct phonet_device_list *phonet_device_list(struct net *net);
|
||||
@@ -47,6 +47,12 @@ u8 phonet_address_get(struct net_device *dev, u8 addr);
|
||||
int phonet_address_lookup(struct net *net, u8 addr);
|
||||
void phonet_address_notify(int event, struct net_device *dev, u8 addr);
|
||||
|
||||
int phonet_route_add(struct net_device *dev, u8 daddr);
|
||||
int phonet_route_del(struct net_device *dev, u8 daddr);
|
||||
void rtm_phonet_notify(int event, struct net_device *dev, u8 dst);
|
||||
struct net_device *phonet_route_get(struct net *net, u8 daddr);
|
||||
struct net_device *phonet_route_output(struct net *net, u8 daddr);
|
||||
|
||||
#define PN_NO_ADDR 0xff
|
||||
|
||||
extern const struct file_operations pn_sock_seq_fops;
|
||||
|
@@ -7,8 +7,7 @@
|
||||
|
||||
/* Basic packet classifier frontend definitions. */
|
||||
|
||||
struct tcf_walker
|
||||
{
|
||||
struct tcf_walker {
|
||||
int stop;
|
||||
int skip;
|
||||
int count;
|
||||
@@ -61,8 +60,7 @@ tcf_unbind_filter(struct tcf_proto *tp, struct tcf_result *r)
|
||||
tp->q->ops->cl_ops->unbind_tcf(tp->q, cl);
|
||||
}
|
||||
|
||||
struct tcf_exts
|
||||
{
|
||||
struct tcf_exts {
|
||||
#ifdef CONFIG_NET_CLS_ACT
|
||||
struct tc_action *action;
|
||||
#endif
|
||||
@@ -71,8 +69,7 @@ struct tcf_exts
|
||||
/* Map to export classifier specific extension TLV types to the
|
||||
* generic extensions API. Unsupported extensions must be set to 0.
|
||||
*/
|
||||
struct tcf_ext_map
|
||||
{
|
||||
struct tcf_ext_map {
|
||||
int action;
|
||||
int police;
|
||||
};
|
||||
@@ -143,8 +140,7 @@ extern int tcf_exts_dump_stats(struct sk_buff *skb, struct tcf_exts *exts,
|
||||
/**
|
||||
* struct tcf_pkt_info - packet information
|
||||
*/
|
||||
struct tcf_pkt_info
|
||||
{
|
||||
struct tcf_pkt_info {
|
||||
unsigned char * ptr;
|
||||
int nexthdr;
|
||||
};
|
||||
@@ -162,8 +158,7 @@ struct tcf_ematch_ops;
|
||||
* @datalen: length of the ematch specific configuration data
|
||||
* @data: ematch specific data
|
||||
*/
|
||||
struct tcf_ematch
|
||||
{
|
||||
struct tcf_ematch {
|
||||
struct tcf_ematch_ops * ops;
|
||||
unsigned long data;
|
||||
unsigned int datalen;
|
||||
@@ -211,8 +206,7 @@ static inline int tcf_em_early_end(struct tcf_ematch *em, int result)
|
||||
* @hdr: ematch tree header supplied by userspace
|
||||
* @matches: array of ematches
|
||||
*/
|
||||
struct tcf_ematch_tree
|
||||
{
|
||||
struct tcf_ematch_tree {
|
||||
struct tcf_ematch_tree_hdr hdr;
|
||||
struct tcf_ematch * matches;
|
||||
|
||||
@@ -230,8 +224,7 @@ struct tcf_ematch_tree
|
||||
* @owner: owner, must be set to THIS_MODULE
|
||||
* @link: link to previous/next ematch module (internal use)
|
||||
*/
|
||||
struct tcf_ematch_ops
|
||||
{
|
||||
struct tcf_ematch_ops {
|
||||
int kind;
|
||||
int datalen;
|
||||
int (*change)(struct tcf_proto *, void *,
|
||||
@@ -302,8 +295,7 @@ static inline int tcf_em_tree_match(struct sk_buff *skb,
|
||||
|
||||
#else /* CONFIG_NET_EMATCH */
|
||||
|
||||
struct tcf_ematch_tree
|
||||
{
|
||||
struct tcf_ematch_tree {
|
||||
};
|
||||
|
||||
#define tcf_em_tree_validate(tp, tb, t) ((void)(t), 0)
|
||||
@@ -351,9 +343,9 @@ tcf_match_indev(struct sk_buff *skb, char *indev)
|
||||
struct net_device *dev;
|
||||
|
||||
if (indev[0]) {
|
||||
if (!skb->iif)
|
||||
if (!skb->skb_iif)
|
||||
return 0;
|
||||
dev = __dev_get_by_index(dev_net(skb->dev), skb->iif);
|
||||
dev = __dev_get_by_index(dev_net(skb->dev), skb->skb_iif);
|
||||
if (!dev || strcmp(indev, dev->name))
|
||||
return 0;
|
||||
}
|
||||
|
@@ -5,8 +5,7 @@
|
||||
#include <linux/ktime.h>
|
||||
#include <net/sch_generic.h>
|
||||
|
||||
struct qdisc_walker
|
||||
{
|
||||
struct qdisc_walker {
|
||||
int stop;
|
||||
int skip;
|
||||
int count;
|
||||
|
@@ -47,8 +47,7 @@ struct net_protocol {
|
||||
};
|
||||
|
||||
#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
|
||||
struct inet6_protocol
|
||||
{
|
||||
struct inet6_protocol {
|
||||
int (*handler)(struct sk_buff *skb);
|
||||
|
||||
void (*err_handler)(struct sk_buff *skb,
|
||||
@@ -83,10 +82,6 @@ struct inet_protosw {
|
||||
struct proto *prot;
|
||||
const struct proto_ops *ops;
|
||||
|
||||
int capability; /* Which (if any) capability do
|
||||
* we need to use this socket
|
||||
* interface?
|
||||
*/
|
||||
char no_check; /* checksum on rcv/xmit/none? */
|
||||
unsigned char flags; /* See INET_PROTOSW_* below. */
|
||||
};
|
||||
|
@@ -90,8 +90,7 @@
|
||||
#define RED_STAB_SIZE 256
|
||||
#define RED_STAB_MASK (RED_STAB_SIZE - 1)
|
||||
|
||||
struct red_stats
|
||||
{
|
||||
struct red_stats {
|
||||
u32 prob_drop; /* Early probability drops */
|
||||
u32 prob_mark; /* Early probability marks */
|
||||
u32 forced_drop; /* Forced drops, qavg > max_thresh */
|
||||
@@ -101,8 +100,7 @@ struct red_stats
|
||||
u32 backlog;
|
||||
};
|
||||
|
||||
struct red_parms
|
||||
{
|
||||
struct red_parms {
|
||||
/* Parameters */
|
||||
u32 qth_min; /* Min avg length threshold: A scaled */
|
||||
u32 qth_max; /* Max avg length threshold: A scaled */
|
||||
|
@@ -27,13 +27,19 @@ struct sk_buff;
|
||||
struct dst_entry;
|
||||
struct proto;
|
||||
|
||||
/* empty to "strongly type" an otherwise void parameter.
|
||||
*/
|
||||
struct request_values {
|
||||
};
|
||||
|
||||
struct request_sock_ops {
|
||||
int family;
|
||||
int obj_size;
|
||||
struct kmem_cache *slab;
|
||||
char *slab_name;
|
||||
int (*rtx_syn_ack)(struct sock *sk,
|
||||
struct request_sock *req);
|
||||
struct request_sock *req,
|
||||
struct request_values *rvp);
|
||||
void (*send_ack)(struct sock *sk, struct sk_buff *skb,
|
||||
struct request_sock *req);
|
||||
void (*send_reset)(struct sock *sk,
|
||||
|
@@ -49,10 +49,8 @@
|
||||
|
||||
struct fib_nh;
|
||||
struct inet_peer;
|
||||
struct rtable
|
||||
{
|
||||
union
|
||||
{
|
||||
struct rtable {
|
||||
union {
|
||||
struct dst_entry dst;
|
||||
} u;
|
||||
|
||||
@@ -77,16 +75,14 @@ struct rtable
|
||||
struct inet_peer *peer; /* long-living peer info */
|
||||
};
|
||||
|
||||
struct ip_rt_acct
|
||||
{
|
||||
struct ip_rt_acct {
|
||||
__u32 o_bytes;
|
||||
__u32 o_packets;
|
||||
__u32 i_bytes;
|
||||
__u32 i_packets;
|
||||
};
|
||||
|
||||
struct rt_cache_stat
|
||||
{
|
||||
struct rt_cache_stat {
|
||||
unsigned int in_hit;
|
||||
unsigned int in_slow_tot;
|
||||
unsigned int in_slow_mc;
|
||||
@@ -112,6 +108,7 @@ extern int ip_rt_init(void);
|
||||
extern void ip_rt_redirect(__be32 old_gw, __be32 dst, __be32 new_gw,
|
||||
__be32 src, struct net_device *dev);
|
||||
extern void rt_cache_flush(struct net *net, int how);
|
||||
extern void rt_cache_flush_batch(void);
|
||||
extern int __ip_route_output_key(struct net *, struct rtable **, const struct flowi *flp);
|
||||
extern int ip_route_output_key(struct net *, struct rtable **, struct flowi *flp);
|
||||
extern int ip_route_output_flow(struct net *, struct rtable **rp, struct flowi *flp, struct sock *sk, int flags);
|
||||
|
@@ -55,13 +55,15 @@ struct rtnl_link_ops {
|
||||
int (*validate)(struct nlattr *tb[],
|
||||
struct nlattr *data[]);
|
||||
|
||||
int (*newlink)(struct net_device *dev,
|
||||
int (*newlink)(struct net *src_net,
|
||||
struct net_device *dev,
|
||||
struct nlattr *tb[],
|
||||
struct nlattr *data[]);
|
||||
int (*changelink)(struct net_device *dev,
|
||||
struct nlattr *tb[],
|
||||
struct nlattr *data[]);
|
||||
void (*dellink)(struct net_device *dev);
|
||||
void (*dellink)(struct net_device *dev,
|
||||
struct list_head *head);
|
||||
|
||||
size_t (*get_size)(const struct net_device *dev);
|
||||
int (*fill_info)(struct sk_buff *skb,
|
||||
@@ -82,8 +84,9 @@ extern void rtnl_kill_links(struct net *net, struct rtnl_link_ops *ops);
|
||||
extern int rtnl_link_register(struct rtnl_link_ops *ops);
|
||||
extern void rtnl_link_unregister(struct rtnl_link_ops *ops);
|
||||
|
||||
extern struct net_device *rtnl_create_link(struct net *net, char *ifname,
|
||||
const struct rtnl_link_ops *ops, struct nlattr *tb[]);
|
||||
extern struct net *rtnl_link_get_net(struct net *src_net, struct nlattr *tb[]);
|
||||
extern struct net_device *rtnl_create_link(struct net *src_net, struct net *net,
|
||||
char *ifname, const struct rtnl_link_ops *ops, struct nlattr *tb[]);
|
||||
extern const struct nla_policy ifla_policy[IFLA_MAX+1];
|
||||
|
||||
#define MODULE_ALIAS_RTNL_LINK(kind) MODULE_ALIAS("rtnl-link-" kind)
|
||||
|
@@ -15,16 +15,14 @@ struct qdisc_walker;
|
||||
struct tcf_walker;
|
||||
struct module;
|
||||
|
||||
struct qdisc_rate_table
|
||||
{
|
||||
struct qdisc_rate_table {
|
||||
struct tc_ratespec rate;
|
||||
u32 data[256];
|
||||
struct qdisc_rate_table *next;
|
||||
int refcnt;
|
||||
};
|
||||
|
||||
enum qdisc_state_t
|
||||
{
|
||||
enum qdisc_state_t {
|
||||
__QDISC_STATE_RUNNING,
|
||||
__QDISC_STATE_SCHED,
|
||||
__QDISC_STATE_DEACTIVATED,
|
||||
@@ -37,8 +35,7 @@ struct qdisc_size_table {
|
||||
u16 data[];
|
||||
};
|
||||
|
||||
struct Qdisc
|
||||
{
|
||||
struct Qdisc {
|
||||
int (*enqueue)(struct sk_buff *skb, struct Qdisc *dev);
|
||||
struct sk_buff * (*dequeue)(struct Qdisc *dev);
|
||||
unsigned flags;
|
||||
@@ -78,8 +75,7 @@ struct Qdisc
|
||||
struct gnet_stats_queue qstats;
|
||||
};
|
||||
|
||||
struct Qdisc_class_ops
|
||||
{
|
||||
struct Qdisc_class_ops {
|
||||
/* Child qdisc manipulation */
|
||||
struct netdev_queue * (*select_queue)(struct Qdisc *, struct tcmsg *);
|
||||
int (*graft)(struct Qdisc *, unsigned long cl,
|
||||
@@ -108,8 +104,7 @@ struct Qdisc_class_ops
|
||||
struct gnet_dump *);
|
||||
};
|
||||
|
||||
struct Qdisc_ops
|
||||
{
|
||||
struct Qdisc_ops {
|
||||
struct Qdisc_ops *next;
|
||||
const struct Qdisc_class_ops *cl_ops;
|
||||
char id[IFNAMSIZ];
|
||||
@@ -133,14 +128,12 @@ struct Qdisc_ops
|
||||
};
|
||||
|
||||
|
||||
struct tcf_result
|
||||
{
|
||||
struct tcf_result {
|
||||
unsigned long class;
|
||||
u32 classid;
|
||||
};
|
||||
|
||||
struct tcf_proto_ops
|
||||
{
|
||||
struct tcf_proto_ops {
|
||||
struct tcf_proto_ops *next;
|
||||
char kind[IFNAMSIZ];
|
||||
|
||||
@@ -164,8 +157,7 @@ struct tcf_proto_ops
|
||||
struct module *owner;
|
||||
};
|
||||
|
||||
struct tcf_proto
|
||||
{
|
||||
struct tcf_proto {
|
||||
/* Fast access part */
|
||||
struct tcf_proto *next;
|
||||
void *root;
|
||||
@@ -261,14 +253,12 @@ extern struct Qdisc_ops noop_qdisc_ops;
|
||||
extern struct Qdisc_ops pfifo_fast_ops;
|
||||
extern struct Qdisc_ops mq_qdisc_ops;
|
||||
|
||||
struct Qdisc_class_common
|
||||
{
|
||||
struct Qdisc_class_common {
|
||||
u32 classid;
|
||||
struct hlist_node hnode;
|
||||
};
|
||||
|
||||
struct Qdisc_class_hash
|
||||
{
|
||||
struct Qdisc_class_hash {
|
||||
struct hlist_head *hash;
|
||||
unsigned int hashsize;
|
||||
unsigned int hashmask;
|
||||
|
@@ -12,15 +12,13 @@
|
||||
*/
|
||||
#define SCM_MAX_FD 255
|
||||
|
||||
struct scm_fp_list
|
||||
{
|
||||
struct scm_fp_list {
|
||||
struct list_head list;
|
||||
int count;
|
||||
struct file *fp[SCM_MAX_FD];
|
||||
};
|
||||
|
||||
struct scm_cookie
|
||||
{
|
||||
struct scm_cookie {
|
||||
struct ucred creds; /* Skb credentials */
|
||||
struct scm_fp_list *fp; /* Passed files */
|
||||
#ifdef CONFIG_SECURITY_NETWORK
|
||||
@@ -88,8 +86,7 @@ static inline void scm_passec(struct socket *sock, struct msghdr *msg, struct sc
|
||||
static __inline__ void scm_recv(struct socket *sock, struct msghdr *msg,
|
||||
struct scm_cookie *scm, int flags)
|
||||
{
|
||||
if (!msg->msg_control)
|
||||
{
|
||||
if (!msg->msg_control) {
|
||||
if (test_bit(SOCK_PASSCRED, &sock->flags) || scm->fp)
|
||||
msg->msg_flags |= MSG_CTRUNC;
|
||||
scm_destroy(scm);
|
||||
|
@@ -308,6 +308,10 @@ enum { SCTP_MAX_GABS = 16 };
|
||||
|
||||
#define SCTP_DEFAULT_MINWINDOW 1500 /* default minimum rwnd size */
|
||||
#define SCTP_DEFAULT_MAXWINDOW 65535 /* default rwnd size */
|
||||
#define SCTP_DEFAULT_RWND_SHIFT 4 /* by default, update on 1/16 of
|
||||
* rcvbuf, which is 1/8 of initial
|
||||
* window
|
||||
*/
|
||||
#define SCTP_DEFAULT_MAXSEGMENT 1500 /* MTU size, this is the limit
|
||||
* to which we will raise the P-MTU.
|
||||
*/
|
||||
|
@@ -227,8 +227,7 @@ DECLARE_SNMP_STAT(struct sctp_mib, sctp_statistics);
|
||||
#endif /* !TEST_FRAME */
|
||||
|
||||
/* sctp mib definitions */
|
||||
enum
|
||||
{
|
||||
enum {
|
||||
SCTP_MIB_NUM = 0,
|
||||
SCTP_MIB_CURRESTAB, /* CurrEstab */
|
||||
SCTP_MIB_ACTIVEESTABS, /* ActiveEstabs */
|
||||
|
@@ -243,7 +243,8 @@ struct sctp_chunk *sctp_make_op_error(const struct sctp_association *,
|
||||
const struct sctp_chunk *chunk,
|
||||
__be16 cause_code,
|
||||
const void *payload,
|
||||
size_t paylen);
|
||||
size_t paylen,
|
||||
size_t reserve_tail);
|
||||
|
||||
struct sctp_chunk *sctp_make_asconf_update_ip(struct sctp_association *,
|
||||
union sctp_addr *,
|
||||
|
@@ -231,6 +231,11 @@ extern struct sctp_globals {
|
||||
/* Flag to indicate whether computing and verifying checksum
|
||||
* is disabled. */
|
||||
int checksum_disable;
|
||||
|
||||
/* Threshold for rwnd update SACKS. Receive buffer shifted this many
|
||||
* bits is an indicator of when to send and window update SACK.
|
||||
*/
|
||||
int rwnd_update_shift;
|
||||
} sctp_globals;
|
||||
|
||||
#define sctp_rto_initial (sctp_globals.rto_initial)
|
||||
@@ -267,6 +272,7 @@ extern struct sctp_globals {
|
||||
#define sctp_prsctp_enable (sctp_globals.prsctp_enable)
|
||||
#define sctp_auth_enable (sctp_globals.auth_enable)
|
||||
#define sctp_checksum_disable (sctp_globals.checksum_disable)
|
||||
#define sctp_rwnd_upd_shift (sctp_globals.rwnd_update_shift)
|
||||
|
||||
/* SCTP Socket type: UDP or TCP style. */
|
||||
typedef enum {
|
||||
@@ -935,6 +941,8 @@ struct sctp_transport {
|
||||
/* Data that has been sent, but not acknowledged. */
|
||||
__u32 flight_size;
|
||||
|
||||
__u32 burst_limited; /* Holds old cwnd when max.burst is applied */
|
||||
|
||||
/* TSN marking the fast recovery exit point */
|
||||
__u32 fast_recovery_exit;
|
||||
|
||||
@@ -943,12 +951,6 @@ struct sctp_transport {
|
||||
/* Source address. */
|
||||
union sctp_addr saddr;
|
||||
|
||||
/* When was the last time(in jiffies) that a data packet was sent on
|
||||
* this transport? This is used to adjust the cwnd when the transport
|
||||
* becomes inactive.
|
||||
*/
|
||||
unsigned long last_time_used;
|
||||
|
||||
/* Heartbeat interval: The endpoint sends out a Heartbeat chunk to
|
||||
* the destination address every heartbeat interval.
|
||||
*/
|
||||
@@ -1069,6 +1071,8 @@ void sctp_transport_put(struct sctp_transport *);
|
||||
void sctp_transport_update_rto(struct sctp_transport *, __u32);
|
||||
void sctp_transport_raise_cwnd(struct sctp_transport *, __u32, __u32);
|
||||
void sctp_transport_lower_cwnd(struct sctp_transport *, sctp_lower_cwnd_t);
|
||||
void sctp_transport_burst_limited(struct sctp_transport *);
|
||||
void sctp_transport_burst_reset(struct sctp_transport *);
|
||||
unsigned long sctp_transport_timeout(struct sctp_transport *);
|
||||
void sctp_transport_reset(struct sctp_transport *);
|
||||
void sctp_transport_update_pmtu(struct sctp_transport *, u32);
|
||||
|
@@ -60,96 +60,49 @@ typedef __s32 sctp_assoc_t;
|
||||
/* The following symbols come from the Sockets API Extensions for
|
||||
* SCTP <draft-ietf-tsvwg-sctpsocket-07.txt>.
|
||||
*/
|
||||
enum sctp_optname {
|
||||
SCTP_RTOINFO,
|
||||
#define SCTP_RTOINFO SCTP_RTOINFO
|
||||
SCTP_ASSOCINFO,
|
||||
#define SCTP_ASSOCINFO SCTP_ASSOCINFO
|
||||
SCTP_INITMSG,
|
||||
#define SCTP_INITMSG SCTP_INITMSG
|
||||
SCTP_NODELAY, /* Get/set nodelay option. */
|
||||
#define SCTP_NODELAY SCTP_NODELAY
|
||||
SCTP_AUTOCLOSE,
|
||||
#define SCTP_AUTOCLOSE SCTP_AUTOCLOSE
|
||||
SCTP_SET_PEER_PRIMARY_ADDR,
|
||||
#define SCTP_SET_PEER_PRIMARY_ADDR SCTP_SET_PEER_PRIMARY_ADDR
|
||||
SCTP_PRIMARY_ADDR,
|
||||
#define SCTP_PRIMARY_ADDR SCTP_PRIMARY_ADDR
|
||||
SCTP_ADAPTATION_LAYER,
|
||||
#define SCTP_ADAPTATION_LAYER SCTP_ADAPTATION_LAYER
|
||||
SCTP_DISABLE_FRAGMENTS,
|
||||
#define SCTP_DISABLE_FRAGMENTS SCTP_DISABLE_FRAGMENTS
|
||||
SCTP_PEER_ADDR_PARAMS,
|
||||
#define SCTP_PEER_ADDR_PARAMS SCTP_PEER_ADDR_PARAMS
|
||||
SCTP_DEFAULT_SEND_PARAM,
|
||||
#define SCTP_DEFAULT_SEND_PARAM SCTP_DEFAULT_SEND_PARAM
|
||||
SCTP_EVENTS,
|
||||
#define SCTP_EVENTS SCTP_EVENTS
|
||||
SCTP_I_WANT_MAPPED_V4_ADDR, /* Turn on/off mapped v4 addresses */
|
||||
#define SCTP_I_WANT_MAPPED_V4_ADDR SCTP_I_WANT_MAPPED_V4_ADDR
|
||||
SCTP_MAXSEG, /* Get/set maximum fragment. */
|
||||
#define SCTP_MAXSEG SCTP_MAXSEG
|
||||
SCTP_STATUS,
|
||||
#define SCTP_STATUS SCTP_STATUS
|
||||
SCTP_GET_PEER_ADDR_INFO,
|
||||
#define SCTP_GET_PEER_ADDR_INFO SCTP_GET_PEER_ADDR_INFO
|
||||
SCTP_DELAYED_ACK,
|
||||
#define SCTP_DELAYED_ACK_TIME SCTP_DELAYED_ACK
|
||||
#define SCTP_DELAYED_ACK SCTP_DELAYED_ACK
|
||||
SCTP_CONTEXT, /* Receive Context */
|
||||
#define SCTP_CONTEXT SCTP_CONTEXT
|
||||
SCTP_FRAGMENT_INTERLEAVE,
|
||||
#define SCTP_FRAGMENT_INTERLEAVE SCTP_FRAGMENT_INTERLEAVE
|
||||
SCTP_PARTIAL_DELIVERY_POINT, /* Set/Get partial delivery point */
|
||||
#define SCTP_PARTIAL_DELIVERY_POINT SCTP_PARTIAL_DELIVERY_POINT
|
||||
SCTP_MAX_BURST, /* Set/Get max burst */
|
||||
#define SCTP_MAX_BURST SCTP_MAX_BURST
|
||||
SCTP_AUTH_CHUNK, /* Set only: add a chunk type to authenticat */
|
||||
#define SCTP_AUTH_CHUNK SCTP_AUTH_CHUNK
|
||||
SCTP_HMAC_IDENT,
|
||||
#define SCTP_HMAC_IDENT SCTP_HMAC_IDENT
|
||||
SCTP_AUTH_KEY,
|
||||
#define SCTP_AUTH_KEY SCTP_AUTH_KEY
|
||||
SCTP_AUTH_ACTIVE_KEY,
|
||||
#define SCTP_AUTH_ACTIVE_KEY SCTP_AUTH_ACTIVE_KEY
|
||||
SCTP_AUTH_DELETE_KEY,
|
||||
#define SCTP_AUTH_DELETE_KEY SCTP_AUTH_DELETE_KEY
|
||||
SCTP_PEER_AUTH_CHUNKS, /* Read only */
|
||||
#define SCTP_PEER_AUTH_CHUNKS SCTP_PEER_AUTH_CHUNKS
|
||||
SCTP_LOCAL_AUTH_CHUNKS, /* Read only */
|
||||
#define SCTP_LOCAL_AUTH_CHUNKS SCTP_LOCAL_AUTH_CHUNKS
|
||||
SCTP_GET_ASSOC_NUMBER, /* Read only */
|
||||
#define SCTP_GET_ASSOC_NUMBER SCTP_GET_ASSOC_NUMBER
|
||||
#define SCTP_RTOINFO 0
|
||||
#define SCTP_ASSOCINFO 1
|
||||
#define SCTP_INITMSG 2
|
||||
#define SCTP_NODELAY 3 /* Get/set nodelay option. */
|
||||
#define SCTP_AUTOCLOSE 4
|
||||
#define SCTP_SET_PEER_PRIMARY_ADDR 5
|
||||
#define SCTP_PRIMARY_ADDR 6
|
||||
#define SCTP_ADAPTATION_LAYER 7
|
||||
#define SCTP_DISABLE_FRAGMENTS 8
|
||||
#define SCTP_PEER_ADDR_PARAMS 9
|
||||
#define SCTP_DEFAULT_SEND_PARAM 10
|
||||
#define SCTP_EVENTS 11
|
||||
#define SCTP_I_WANT_MAPPED_V4_ADDR 12 /* Turn on/off mapped v4 addresses */
|
||||
#define SCTP_MAXSEG 13 /* Get/set maximum fragment. */
|
||||
#define SCTP_STATUS 14
|
||||
#define SCTP_GET_PEER_ADDR_INFO 15
|
||||
#define SCTP_DELAYED_ACK_TIME 16
|
||||
#define SCTP_DELAYED_ACK SCTP_DELAYED_ACK_TIME
|
||||
#define SCTP_CONTEXT 17
|
||||
#define SCTP_FRAGMENT_INTERLEAVE 18
|
||||
#define SCTP_PARTIAL_DELIVERY_POINT 19 /* Set/Get partial delivery point */
|
||||
#define SCTP_MAX_BURST 20 /* Set/Get max burst */
|
||||
#define SCTP_AUTH_CHUNK 21 /* Set only: add a chunk type to authenticate */
|
||||
#define SCTP_HMAC_IDENT 22
|
||||
#define SCTP_AUTH_KEY 23
|
||||
#define SCTP_AUTH_ACTIVE_KEY 24
|
||||
#define SCTP_AUTH_DELETE_KEY 25
|
||||
#define SCTP_PEER_AUTH_CHUNKS 26 /* Read only */
|
||||
#define SCTP_LOCAL_AUTH_CHUNKS 27 /* Read only */
|
||||
#define SCTP_GET_ASSOC_NUMBER 28 /* Read only */
|
||||
|
||||
|
||||
/* Internal Socket Options. Some of the sctp library functions are
|
||||
* implemented using these socket options.
|
||||
*/
|
||||
SCTP_SOCKOPT_BINDX_ADD = 100,/* BINDX requests for adding addresses. */
|
||||
#define SCTP_SOCKOPT_BINDX_ADD SCTP_SOCKOPT_BINDX_ADD
|
||||
SCTP_SOCKOPT_BINDX_REM, /* BINDX requests for removing addresses. */
|
||||
#define SCTP_SOCKOPT_BINDX_REM SCTP_SOCKOPT_BINDX_REM
|
||||
SCTP_SOCKOPT_PEELOFF, /* peel off association. */
|
||||
#define SCTP_SOCKOPT_PEELOFF SCTP_SOCKOPT_PEELOFF
|
||||
SCTP_GET_PEER_ADDRS_NUM_OLD, /* Get number of peer addresss. */
|
||||
#define SCTP_GET_PEER_ADDRS_NUM_OLD SCTP_GET_PEER_ADDRS_NUM_OLD
|
||||
SCTP_GET_PEER_ADDRS_OLD, /* Get all peer addresss. */
|
||||
#define SCTP_GET_PEER_ADDRS_OLD SCTP_GET_PEER_ADDRS_OLD
|
||||
SCTP_GET_LOCAL_ADDRS_NUM_OLD, /* Get number of local addresss. */
|
||||
#define SCTP_GET_LOCAL_ADDRS_NUM_OLD SCTP_GET_LOCAL_ADDRS_NUM_OLD
|
||||
SCTP_GET_LOCAL_ADDRS_OLD, /* Get all local addresss. */
|
||||
#define SCTP_GET_LOCAL_ADDRS_OLD SCTP_GET_LOCAL_ADDRS_OLD
|
||||
SCTP_SOCKOPT_CONNECTX_OLD, /* CONNECTX old requests. */
|
||||
#define SCTP_SOCKOPT_CONNECTX_OLD SCTP_SOCKOPT_CONNECTX_OLD
|
||||
SCTP_GET_PEER_ADDRS, /* Get all peer addresss. */
|
||||
#define SCTP_GET_PEER_ADDRS SCTP_GET_PEER_ADDRS
|
||||
SCTP_GET_LOCAL_ADDRS, /* Get all local addresss. */
|
||||
#define SCTP_GET_LOCAL_ADDRS SCTP_GET_LOCAL_ADDRS
|
||||
SCTP_SOCKOPT_CONNECTX, /* CONNECTX requests. */
|
||||
#define SCTP_SOCKOPT_CONNECTX SCTP_SOCKOPT_CONNECTX
|
||||
SCTP_SOCKOPT_CONNECTX3, /* CONNECTX requests. (new implementation) */
|
||||
#define SCTP_SOCKOPT_CONNECTX3 SCTP_SOCKOPT_CONNECTX3
|
||||
};
|
||||
/* Internal Socket Options. Some of the sctp library functions are
|
||||
* implemented using these socket options.
|
||||
*/
|
||||
#define SCTP_SOCKOPT_BINDX_ADD 100 /* BINDX requests for adding addrs */
|
||||
#define SCTP_SOCKOPT_BINDX_REM 101 /* BINDX requests for removing addrs. */
|
||||
#define SCTP_SOCKOPT_PEELOFF 102 /* peel off association. */
|
||||
/* Options 104-106 are deprecated and removed. Do not use this space */
|
||||
#define SCTP_SOCKOPT_CONNECTX_OLD 107 /* CONNECTX old requests. */
|
||||
#define SCTP_GET_PEER_ADDRS 108 /* Get all peer addresss. */
|
||||
#define SCTP_GET_LOCAL_ADDRS 109 /* Get all local addresss. */
|
||||
#define SCTP_SOCKOPT_CONNECTX 110 /* CONNECTX requests. */
|
||||
#define SCTP_SOCKOPT_CONNECTX3 111 /* CONNECTX requests (updated) */
|
||||
|
||||
/*
|
||||
* 5.2.1 SCTP Initiation Structure (SCTP_INIT)
|
||||
@@ -206,6 +159,7 @@ enum sctp_sinfo_flags {
|
||||
SCTP_UNORDERED = 1, /* Send/receive message unordered. */
|
||||
SCTP_ADDR_OVER = 2, /* Override the primary destination. */
|
||||
SCTP_ABORT=4, /* Send an ABORT message to the peer. */
|
||||
SCTP_SACK_IMMEDIATELY = 8, /* SACK should be sent without delay */
|
||||
SCTP_EOF=MSG_FIN, /* Initiate graceful shutdown process. */
|
||||
};
|
||||
|
||||
|
@@ -105,14 +105,17 @@ struct net;
|
||||
/**
|
||||
* struct sock_common - minimal network layer representation of sockets
|
||||
* @skc_node: main hash linkage for various protocol lookup tables
|
||||
* @skc_nulls_node: main hash linkage for UDP/UDP-Lite protocol
|
||||
* @skc_nulls_node: main hash linkage for TCP/UDP/UDP-Lite protocol
|
||||
* @skc_refcnt: reference count
|
||||
* @skc_tx_queue_mapping: tx queue number for this connection
|
||||
* @skc_hash: hash value used with various protocol lookup tables
|
||||
* @skc_u16hashes: two u16 hash values used by UDP lookup tables
|
||||
* @skc_family: network address family
|
||||
* @skc_state: Connection state
|
||||
* @skc_reuse: %SO_REUSEADDR setting
|
||||
* @skc_bound_dev_if: bound device index if != 0
|
||||
* @skc_bind_node: bind hash linkage for various protocol lookup tables
|
||||
* @skc_portaddr_node: second hash linkage for UDP/UDP-Lite protocol
|
||||
* @skc_prot: protocol handlers inside a network family
|
||||
* @skc_net: reference to the network namespace of this socket
|
||||
*
|
||||
@@ -128,13 +131,20 @@ struct sock_common {
|
||||
struct hlist_nulls_node skc_nulls_node;
|
||||
};
|
||||
atomic_t skc_refcnt;
|
||||
int skc_tx_queue_mapping;
|
||||
|
||||
unsigned int skc_hash;
|
||||
union {
|
||||
unsigned int skc_hash;
|
||||
__u16 skc_u16hashes[2];
|
||||
};
|
||||
unsigned short skc_family;
|
||||
volatile unsigned char skc_state;
|
||||
unsigned char skc_reuse;
|
||||
int skc_bound_dev_if;
|
||||
struct hlist_node skc_bind_node;
|
||||
union {
|
||||
struct hlist_node skc_bind_node;
|
||||
struct hlist_nulls_node skc_portaddr_node;
|
||||
};
|
||||
struct proto *skc_prot;
|
||||
#ifdef CONFIG_NET_NS
|
||||
struct net *skc_net;
|
||||
@@ -215,6 +225,7 @@ struct sock {
|
||||
#define sk_node __sk_common.skc_node
|
||||
#define sk_nulls_node __sk_common.skc_nulls_node
|
||||
#define sk_refcnt __sk_common.skc_refcnt
|
||||
#define sk_tx_queue_mapping __sk_common.skc_tx_queue_mapping
|
||||
|
||||
#define sk_copy_start __sk_common.skc_hash
|
||||
#define sk_hash __sk_common.skc_hash
|
||||
@@ -504,6 +515,8 @@ enum sock_flags {
|
||||
SOCK_TIMESTAMPING_SOFTWARE, /* %SOF_TIMESTAMPING_SOFTWARE */
|
||||
SOCK_TIMESTAMPING_RAW_HARDWARE, /* %SOF_TIMESTAMPING_RAW_HARDWARE */
|
||||
SOCK_TIMESTAMPING_SYS_HARDWARE, /* %SOF_TIMESTAMPING_SYS_HARDWARE */
|
||||
SOCK_FASYNC, /* fasync() active */
|
||||
SOCK_RXQ_OVFL,
|
||||
};
|
||||
|
||||
static inline void sock_copy_flags(struct sock *nsk, struct sock *osk)
|
||||
@@ -1092,8 +1105,29 @@ static inline void sock_put(struct sock *sk)
|
||||
extern int sk_receive_skb(struct sock *sk, struct sk_buff *skb,
|
||||
const int nested);
|
||||
|
||||
static inline void sk_tx_queue_set(struct sock *sk, int tx_queue)
|
||||
{
|
||||
sk->sk_tx_queue_mapping = tx_queue;
|
||||
}
|
||||
|
||||
static inline void sk_tx_queue_clear(struct sock *sk)
|
||||
{
|
||||
sk->sk_tx_queue_mapping = -1;
|
||||
}
|
||||
|
||||
static inline int sk_tx_queue_get(const struct sock *sk)
|
||||
{
|
||||
return sk->sk_tx_queue_mapping;
|
||||
}
|
||||
|
||||
static inline bool sk_tx_queue_recorded(const struct sock *sk)
|
||||
{
|
||||
return (sk && sk->sk_tx_queue_mapping >= 0);
|
||||
}
|
||||
|
||||
static inline void sk_set_socket(struct sock *sk, struct socket *sock)
|
||||
{
|
||||
sk_tx_queue_clear(sk);
|
||||
sk->sk_socket = sock;
|
||||
}
|
||||
|
||||
@@ -1150,6 +1184,7 @@ __sk_dst_set(struct sock *sk, struct dst_entry *dst)
|
||||
{
|
||||
struct dst_entry *old_dst;
|
||||
|
||||
sk_tx_queue_clear(sk);
|
||||
old_dst = sk->sk_dst_cache;
|
||||
sk->sk_dst_cache = dst;
|
||||
dst_release(old_dst);
|
||||
@@ -1168,6 +1203,7 @@ __sk_dst_reset(struct sock *sk)
|
||||
{
|
||||
struct dst_entry *old_dst;
|
||||
|
||||
sk_tx_queue_clear(sk);
|
||||
old_dst = sk->sk_dst_cache;
|
||||
sk->sk_dst_cache = NULL;
|
||||
dst_release(old_dst);
|
||||
@@ -1396,7 +1432,7 @@ static inline unsigned long sock_wspace(struct sock *sk)
|
||||
|
||||
static inline void sk_wake_async(struct sock *sk, int how, int band)
|
||||
{
|
||||
if (sk->sk_socket && sk->sk_socket->fasync_list)
|
||||
if (sock_flag(sk, SOCK_FASYNC))
|
||||
sock_wake_async(sk->sk_socket, how, band);
|
||||
}
|
||||
|
||||
@@ -1492,6 +1528,8 @@ sock_recv_timestamp(struct msghdr *msg, struct sock *sk, struct sk_buff *skb)
|
||||
sk->sk_stamp = kt;
|
||||
}
|
||||
|
||||
extern void sock_recv_ts_and_drops(struct msghdr *msg, struct sock *sk, struct sk_buff *skb);
|
||||
|
||||
/**
|
||||
* sock_tx_timestamp - checks whether the outgoing packet is to be time stamped
|
||||
* @msg: outgoing packet
|
||||
|
@@ -26,7 +26,9 @@ struct tcf_skbedit {
|
||||
struct tcf_common common;
|
||||
u32 flags;
|
||||
u32 priority;
|
||||
u32 mark;
|
||||
u16 queue_mapping;
|
||||
/* XXX: 16-bit pad here? */
|
||||
};
|
||||
#define to_skbedit(pc) \
|
||||
container_of(pc, struct tcf_skbedit, common)
|
||||
|
@@ -30,6 +30,7 @@
|
||||
#include <linux/dmaengine.h>
|
||||
#include <linux/crypto.h>
|
||||
#include <linux/cryptohash.h>
|
||||
#include <linux/kref.h>
|
||||
|
||||
#include <net/inet_connection_sock.h>
|
||||
#include <net/inet_timewait_sock.h>
|
||||
@@ -62,9 +63,6 @@ extern void tcp_time_wait(struct sock *sk, int state, int timeo);
|
||||
/* Minimal accepted MSS. It is (60+60+8) - (20+20). */
|
||||
#define TCP_MIN_MSS 88U
|
||||
|
||||
/* Minimal RCV_MSS. */
|
||||
#define TCP_MIN_RCVMSS 536U
|
||||
|
||||
/* The least MTU to use for probing */
|
||||
#define TCP_BASE_MSS 512
|
||||
|
||||
@@ -167,6 +165,7 @@ extern void tcp_time_wait(struct sock *sk, int state, int timeo);
|
||||
#define TCPOPT_SACK 5 /* SACK Block */
|
||||
#define TCPOPT_TIMESTAMP 8 /* Better RTT estimations/PAWS */
|
||||
#define TCPOPT_MD5SIG 19 /* MD5 Signature (RFC2385) */
|
||||
#define TCPOPT_COOKIE 253 /* Cookie extension (experimental) */
|
||||
|
||||
/*
|
||||
* TCP option lengths
|
||||
@@ -177,6 +176,10 @@ extern void tcp_time_wait(struct sock *sk, int state, int timeo);
|
||||
#define TCPOLEN_SACK_PERM 2
|
||||
#define TCPOLEN_TIMESTAMP 10
|
||||
#define TCPOLEN_MD5SIG 18
|
||||
#define TCPOLEN_COOKIE_BASE 2 /* Cookie-less header extension */
|
||||
#define TCPOLEN_COOKIE_PAIR 3 /* Cookie pair header extension */
|
||||
#define TCPOLEN_COOKIE_MIN (TCPOLEN_COOKIE_BASE+TCP_COOKIE_MIN)
|
||||
#define TCPOLEN_COOKIE_MAX (TCPOLEN_COOKIE_BASE+TCP_COOKIE_MAX)
|
||||
|
||||
/* But this is what stacks really send out. */
|
||||
#define TCPOLEN_TSTAMP_ALIGNED 12
|
||||
@@ -237,6 +240,7 @@ extern int sysctl_tcp_base_mss;
|
||||
extern int sysctl_tcp_workaround_signed_windows;
|
||||
extern int sysctl_tcp_slow_start_after_idle;
|
||||
extern int sysctl_tcp_max_ssthresh;
|
||||
extern int sysctl_tcp_cookie_size;
|
||||
|
||||
extern atomic_t tcp_memory_allocated;
|
||||
extern struct percpu_counter tcp_sockets_allocated;
|
||||
@@ -343,11 +347,6 @@ static inline void tcp_dec_quickack_mode(struct sock *sk,
|
||||
|
||||
extern void tcp_enter_quickack_mode(struct sock *sk);
|
||||
|
||||
static inline void tcp_clear_options(struct tcp_options_received *rx_opt)
|
||||
{
|
||||
rx_opt->tstamp_ok = rx_opt->sack_ok = rx_opt->wscale_ok = rx_opt->snd_wscale = 0;
|
||||
}
|
||||
|
||||
#define TCP_ECN_OK 1
|
||||
#define TCP_ECN_QUEUE_CWR 2
|
||||
#define TCP_ECN_DEMAND_CWR 4
|
||||
@@ -359,8 +358,7 @@ TCP_ECN_create_request(struct request_sock *req, struct tcphdr *th)
|
||||
inet_rsk(req)->ecn_ok = 1;
|
||||
}
|
||||
|
||||
enum tcp_tw_status
|
||||
{
|
||||
enum tcp_tw_status {
|
||||
TCP_TW_SUCCESS = 0,
|
||||
TCP_TW_RST = 1,
|
||||
TCP_TW_ACK = 2,
|
||||
@@ -409,7 +407,9 @@ extern int tcp_recvmsg(struct kiocb *iocb, struct sock *sk,
|
||||
|
||||
extern void tcp_parse_options(struct sk_buff *skb,
|
||||
struct tcp_options_received *opt_rx,
|
||||
int estab);
|
||||
u8 **hvpp,
|
||||
int estab,
|
||||
struct dst_entry *dst);
|
||||
|
||||
extern u8 *tcp_parse_md5sig_option(struct tcphdr *th);
|
||||
|
||||
@@ -443,7 +443,8 @@ 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_sock *req,
|
||||
struct request_values *rvp);
|
||||
|
||||
extern int tcp_disconnect(struct sock *sk, int flags);
|
||||
|
||||
@@ -1228,6 +1229,7 @@ static inline void tcp_write_queue_purge(struct sock *sk)
|
||||
while ((skb = __skb_dequeue(&sk->sk_write_queue)) != NULL)
|
||||
sk_wmem_free_skb(sk, skb);
|
||||
sk_mem_reclaim(sk);
|
||||
tcp_clear_all_retrans_hints(tcp_sk(sk));
|
||||
}
|
||||
|
||||
static inline struct sk_buff *tcp_write_queue_head(struct sock *sk)
|
||||
@@ -1480,6 +1482,91 @@ struct tcp_request_sock_ops {
|
||||
#endif
|
||||
};
|
||||
|
||||
/* Using SHA1 for now, define some constants.
|
||||
*/
|
||||
#define COOKIE_DIGEST_WORDS (SHA_DIGEST_WORDS)
|
||||
#define COOKIE_MESSAGE_WORDS (SHA_MESSAGE_BYTES / 4)
|
||||
#define COOKIE_WORKSPACE_WORDS (COOKIE_DIGEST_WORDS + COOKIE_MESSAGE_WORDS)
|
||||
|
||||
extern int tcp_cookie_generator(u32 *bakery);
|
||||
|
||||
/**
|
||||
* struct tcp_cookie_values - each socket needs extra space for the
|
||||
* cookies, together with (optional) space for any SYN data.
|
||||
*
|
||||
* A tcp_sock contains a pointer to the current value, and this is
|
||||
* cloned to the tcp_timewait_sock.
|
||||
*
|
||||
* @cookie_pair: variable data from the option exchange.
|
||||
*
|
||||
* @cookie_desired: user specified tcpct_cookie_desired. Zero
|
||||
* indicates default (sysctl_tcp_cookie_size).
|
||||
* After cookie sent, remembers size of cookie.
|
||||
* Range 0, TCP_COOKIE_MIN to TCP_COOKIE_MAX.
|
||||
*
|
||||
* @s_data_desired: user specified tcpct_s_data_desired. When the
|
||||
* constant payload is specified (@s_data_constant),
|
||||
* holds its length instead.
|
||||
* Range 0 to TCP_MSS_DESIRED.
|
||||
*
|
||||
* @s_data_payload: constant data that is to be included in the
|
||||
* payload of SYN or SYNACK segments when the
|
||||
* cookie option is present.
|
||||
*/
|
||||
struct tcp_cookie_values {
|
||||
struct kref kref;
|
||||
u8 cookie_pair[TCP_COOKIE_PAIR_SIZE];
|
||||
u8 cookie_pair_size;
|
||||
u8 cookie_desired;
|
||||
u16 s_data_desired:11,
|
||||
s_data_constant:1,
|
||||
s_data_in:1,
|
||||
s_data_out:1,
|
||||
s_data_unused:2;
|
||||
u8 s_data_payload[0];
|
||||
};
|
||||
|
||||
static inline void tcp_cookie_values_release(struct kref *kref)
|
||||
{
|
||||
kfree(container_of(kref, struct tcp_cookie_values, kref));
|
||||
}
|
||||
|
||||
/* The length of constant payload data. Note that s_data_desired is
|
||||
* overloaded, depending on s_data_constant: either the length of constant
|
||||
* data (returned here) or the limit on variable data.
|
||||
*/
|
||||
static inline int tcp_s_data_size(const struct tcp_sock *tp)
|
||||
{
|
||||
return (tp->cookie_values != NULL && tp->cookie_values->s_data_constant)
|
||||
? tp->cookie_values->s_data_desired
|
||||
: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* struct tcp_extend_values - tcp_ipv?.c to tcp_output.c workspace.
|
||||
*
|
||||
* As tcp_request_sock has already been extended in other places, the
|
||||
* only remaining method is to pass stack values along as function
|
||||
* parameters. These parameters are not needed after sending SYNACK.
|
||||
*
|
||||
* @cookie_bakery: cryptographic secret and message workspace.
|
||||
*
|
||||
* @cookie_plus: bytes in authenticator/cookie option, copied from
|
||||
* struct tcp_options_received (above).
|
||||
*/
|
||||
struct tcp_extend_values {
|
||||
struct request_values rv;
|
||||
u32 cookie_bakery[COOKIE_WORKSPACE_WORDS];
|
||||
u8 cookie_plus:6,
|
||||
cookie_out_never:1,
|
||||
cookie_in_always:1;
|
||||
};
|
||||
|
||||
static inline struct tcp_extend_values *tcp_xv(struct request_values *rvp)
|
||||
{
|
||||
return (struct tcp_extend_values *)rvp;
|
||||
}
|
||||
|
||||
extern void tcp_v4_init(void);
|
||||
extern void tcp_init(void);
|
||||
|
||||
|
@@ -50,16 +50,49 @@ struct udp_skb_cb {
|
||||
};
|
||||
#define UDP_SKB_CB(__skb) ((struct udp_skb_cb *)((__skb)->cb))
|
||||
|
||||
/**
|
||||
* struct udp_hslot - UDP hash slot
|
||||
*
|
||||
* @head: head of list of sockets
|
||||
* @count: number of sockets in 'head' list
|
||||
* @lock: spinlock protecting changes to head/count
|
||||
*/
|
||||
struct udp_hslot {
|
||||
struct hlist_nulls_head head;
|
||||
int count;
|
||||
spinlock_t lock;
|
||||
} __attribute__((aligned(2 * sizeof(long))));
|
||||
|
||||
/**
|
||||
* struct udp_table - UDP table
|
||||
*
|
||||
* @hash: hash table, sockets are hashed on (local port)
|
||||
* @hash2: hash table, sockets are hashed on (local port, local address)
|
||||
* @mask: number of slots in hash tables, minus 1
|
||||
* @log: log2(number of slots in hash table)
|
||||
*/
|
||||
struct udp_table {
|
||||
struct udp_hslot hash[UDP_HTABLE_SIZE];
|
||||
struct udp_hslot *hash;
|
||||
struct udp_hslot *hash2;
|
||||
unsigned int mask;
|
||||
unsigned int log;
|
||||
};
|
||||
extern struct udp_table udp_table;
|
||||
extern void udp_table_init(struct udp_table *);
|
||||
|
||||
extern void udp_table_init(struct udp_table *, const char *);
|
||||
static inline struct udp_hslot *udp_hashslot(struct udp_table *table,
|
||||
struct net *net, unsigned num)
|
||||
{
|
||||
return &table->hash[udp_hashfn(net, num, table->mask)];
|
||||
}
|
||||
/*
|
||||
* For secondary hash, net_hash_mix() is performed before calling
|
||||
* udp_hashslot2(), this explains difference with udp_hashslot()
|
||||
*/
|
||||
static inline struct udp_hslot *udp_hashslot2(struct udp_table *table,
|
||||
unsigned int hash)
|
||||
{
|
||||
return &table->hash2[hash & table->mask];
|
||||
}
|
||||
|
||||
/* Note: this must match 'valbool' in sock_setsockopt */
|
||||
#define UDP_CSUM_NOXMIT 1
|
||||
@@ -125,7 +158,8 @@ static inline void udp_lib_close(struct sock *sk, long timeout)
|
||||
}
|
||||
|
||||
extern int udp_lib_get_port(struct sock *sk, unsigned short snum,
|
||||
int (*)(const struct sock*,const struct sock*));
|
||||
int (*)(const struct sock *,const struct sock *),
|
||||
unsigned int hash2_nulladdr);
|
||||
|
||||
/* net/ipv4/udp.c */
|
||||
extern int udp_get_port(struct sock *sk, unsigned short snum,
|
||||
|
@@ -1,29 +1,19 @@
|
||||
#ifndef __NET_WEXT_H
|
||||
#define __NET_WEXT_H
|
||||
|
||||
/*
|
||||
* wireless extensions interface to the core code
|
||||
*/
|
||||
#include <net/iw_handler.h>
|
||||
|
||||
struct net;
|
||||
|
||||
#ifdef CONFIG_WIRELESS_EXT
|
||||
extern int wext_proc_init(struct net *net);
|
||||
extern void wext_proc_exit(struct net *net);
|
||||
#ifdef CONFIG_WEXT_CORE
|
||||
extern int wext_handle_ioctl(struct net *net, struct ifreq *ifr, unsigned int cmd,
|
||||
void __user *arg);
|
||||
extern int compat_wext_handle_ioctl(struct net *net, unsigned int cmd,
|
||||
unsigned long arg);
|
||||
|
||||
extern struct iw_statistics *get_wireless_stats(struct net_device *dev);
|
||||
extern int call_commit_handler(struct net_device *dev);
|
||||
#else
|
||||
static inline int wext_proc_init(struct net *net)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline void wext_proc_exit(struct net *net)
|
||||
{
|
||||
return;
|
||||
}
|
||||
static inline int wext_handle_ioctl(struct net *net, struct ifreq *ifr, unsigned int cmd,
|
||||
void __user *arg)
|
||||
{
|
||||
@@ -36,4 +26,35 @@ static inline int compat_wext_handle_ioctl(struct net *net, unsigned int cmd,
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_WEXT_PROC
|
||||
extern int wext_proc_init(struct net *net);
|
||||
extern void wext_proc_exit(struct net *net);
|
||||
#else
|
||||
static inline int wext_proc_init(struct net *net)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline void wext_proc_exit(struct net *net)
|
||||
{
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_WEXT_PRIV
|
||||
int ioctl_private_call(struct net_device *dev, struct iwreq *iwr,
|
||||
unsigned int cmd, struct iw_request_info *info,
|
||||
iw_handler handler);
|
||||
int compat_private_call(struct net_device *dev, struct iwreq *iwr,
|
||||
unsigned int cmd, struct iw_request_info *info,
|
||||
iw_handler handler);
|
||||
int iw_handler_get_private(struct net_device * dev,
|
||||
struct iw_request_info * info,
|
||||
union iwreq_data * wrqu,
|
||||
char * extra);
|
||||
#else
|
||||
#define ioctl_private_call NULL
|
||||
#define compat_private_call NULL
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* __NET_WEXT_H */
|
||||
|
@@ -195,6 +195,12 @@
|
||||
* defining the `struct nla_policy` for each message, it has to have
|
||||
* an array size of WIMAX_GNL_ATTR_MAX+1.
|
||||
*
|
||||
* The op_*() function pointers will not be called if the wimax_dev is
|
||||
* in a state <= %WIMAX_ST_UNINITIALIZED. The exception is:
|
||||
*
|
||||
* - op_reset: can be called at any time after wimax_dev_add() has
|
||||
* been called.
|
||||
*
|
||||
* THE PIPE INTERFACE:
|
||||
*
|
||||
* This interface is kept intentionally simple. The driver can send
|
||||
|
@@ -34,20 +34,32 @@ struct wpan_phy {
|
||||
*/
|
||||
u8 current_channel;
|
||||
u8 current_page;
|
||||
u32 channels_supported;
|
||||
u32 channels_supported[32];
|
||||
u8 transmit_power;
|
||||
u8 cca_mode;
|
||||
|
||||
struct device dev;
|
||||
int idx;
|
||||
|
||||
struct net_device *(*add_iface)(struct wpan_phy *phy,
|
||||
const char *name);
|
||||
void (*del_iface)(struct wpan_phy *phy, struct net_device *dev);
|
||||
|
||||
char priv[0] __attribute__((__aligned__(NETDEV_ALIGN)));
|
||||
};
|
||||
|
||||
#define to_phy(_dev) container_of(_dev, struct wpan_phy, dev)
|
||||
|
||||
struct wpan_phy *wpan_phy_alloc(size_t priv_size);
|
||||
int wpan_phy_register(struct device *parent, struct wpan_phy *phy);
|
||||
static inline void wpan_phy_set_dev(struct wpan_phy *phy, struct device *dev)
|
||||
{
|
||||
phy->dev.parent = dev;
|
||||
}
|
||||
int wpan_phy_register(struct wpan_phy *phy);
|
||||
void wpan_phy_unregister(struct wpan_phy *phy);
|
||||
void wpan_phy_free(struct wpan_phy *phy);
|
||||
/* Same semantics as for class_for_each_device */
|
||||
int wpan_phy_for_each(int (*fn)(struct wpan_phy *phy, void *data), void *data);
|
||||
|
||||
static inline void *wpan_phy_priv(struct wpan_phy *phy)
|
||||
{
|
||||
@@ -56,6 +68,12 @@ static inline void *wpan_phy_priv(struct wpan_phy *phy)
|
||||
}
|
||||
|
||||
struct wpan_phy *wpan_phy_find(const char *str);
|
||||
|
||||
static inline void wpan_phy_put(struct wpan_phy *phy)
|
||||
{
|
||||
put_device(&phy->dev);
|
||||
}
|
||||
|
||||
static inline const char *wpan_phy_name(struct wpan_phy *phy)
|
||||
{
|
||||
return dev_name(&phy->dev);
|
||||
|
@@ -287,8 +287,14 @@ extern unsigned long x25_display_timer(struct sock *);
|
||||
extern void x25_check_rbuf(struct sock *);
|
||||
|
||||
/* sysctl_net_x25.c */
|
||||
#ifdef CONFIG_SYSCTL
|
||||
extern void x25_register_sysctl(void);
|
||||
extern void x25_unregister_sysctl(void);
|
||||
#else
|
||||
static inline void x25_register_sysctl(void) {};
|
||||
static inline void x25_unregister_sysctl(void) {};
|
||||
#endif /* CONFIG_SYSCTL */
|
||||
|
||||
struct x25_skb_cb {
|
||||
unsigned flags;
|
||||
};
|
||||
|
@@ -19,6 +19,9 @@
|
||||
#include <net/route.h>
|
||||
#include <net/ipv6.h>
|
||||
#include <net/ip6_fib.h>
|
||||
|
||||
#include <linux/interrupt.h>
|
||||
|
||||
#ifdef CONFIG_XFRM_STATISTICS
|
||||
#include <net/snmp.h>
|
||||
#endif
|
||||
@@ -121,8 +124,7 @@ struct xfrm_state_walk {
|
||||
};
|
||||
|
||||
/* Full description of state of transformer. */
|
||||
struct xfrm_state
|
||||
{
|
||||
struct xfrm_state {
|
||||
#ifdef CONFIG_NET_NS
|
||||
struct net *xs_net;
|
||||
#endif
|
||||
@@ -160,7 +162,7 @@ struct xfrm_state
|
||||
struct xfrm_lifetime_cfg lft;
|
||||
|
||||
/* Data for transformer */
|
||||
struct xfrm_algo *aalg;
|
||||
struct xfrm_algo_auth *aalg;
|
||||
struct xfrm_algo *ealg;
|
||||
struct xfrm_algo *calg;
|
||||
struct xfrm_algo_aead *aead;
|
||||
@@ -199,7 +201,7 @@ struct xfrm_state
|
||||
struct xfrm_stats stats;
|
||||
|
||||
struct xfrm_lifetime_cur curlft;
|
||||
struct timer_list timer;
|
||||
struct tasklet_hrtimer mtimer;
|
||||
|
||||
/* Last used time */
|
||||
unsigned long lastused;
|
||||
@@ -237,8 +239,7 @@ enum {
|
||||
};
|
||||
|
||||
/* callback structure passed from either netlink or pfkey */
|
||||
struct km_event
|
||||
{
|
||||
struct km_event {
|
||||
union {
|
||||
u32 hard;
|
||||
u32 proto;
|
||||
@@ -313,8 +314,7 @@ extern int xfrm_state_unregister_afinfo(struct xfrm_state_afinfo *afinfo);
|
||||
|
||||
extern void xfrm_state_delete_tunnel(struct xfrm_state *x);
|
||||
|
||||
struct xfrm_type
|
||||
{
|
||||
struct xfrm_type {
|
||||
char *description;
|
||||
struct module *owner;
|
||||
__u8 proto;
|
||||
@@ -420,8 +420,7 @@ static inline struct xfrm_mode *xfrm_ip2inner_mode(struct xfrm_state *x, int ipp
|
||||
return x->inner_mode_iaf;
|
||||
}
|
||||
|
||||
struct xfrm_tmpl
|
||||
{
|
||||
struct xfrm_tmpl {
|
||||
/* id in template is interpreted as:
|
||||
* daddr - destination of tunnel, may be zero for transport mode.
|
||||
* spi - zero to acquire spi. Not zero if spi is static, then
|
||||
@@ -468,8 +467,7 @@ struct xfrm_policy_walk {
|
||||
u32 seq;
|
||||
};
|
||||
|
||||
struct xfrm_policy
|
||||
{
|
||||
struct xfrm_policy {
|
||||
#ifdef CONFIG_NET_NS
|
||||
struct net *xp_net;
|
||||
#endif
|
||||
@@ -538,8 +536,7 @@ struct xfrm_migrate {
|
||||
/* default seq threshold size */
|
||||
#define XFRM_AE_SEQT_SIZE 2
|
||||
|
||||
struct xfrm_mgr
|
||||
{
|
||||
struct xfrm_mgr {
|
||||
struct list_head list;
|
||||
char *id;
|
||||
int (*notify)(struct xfrm_state *x, struct km_event *c);
|
||||
@@ -626,8 +623,7 @@ struct xfrm_spi_skb_cb {
|
||||
#define XFRM_SPI_SKB_CB(__skb) ((struct xfrm_spi_skb_cb *)&((__skb)->cb[0]))
|
||||
|
||||
/* Audit Information */
|
||||
struct xfrm_audit
|
||||
{
|
||||
struct xfrm_audit {
|
||||
u32 secid;
|
||||
uid_t loginuid;
|
||||
u32 sessionid;
|
||||
@@ -871,8 +867,7 @@ static inline int xfrm_sec_ctx_match(struct xfrm_sec_ctx *s1, struct xfrm_sec_ct
|
||||
* bundles differing by session id. All the bundles grow from a parent
|
||||
* policy rule.
|
||||
*/
|
||||
struct xfrm_dst
|
||||
{
|
||||
struct xfrm_dst {
|
||||
union {
|
||||
struct dst_entry dst;
|
||||
struct rtable rt;
|
||||
@@ -907,8 +902,7 @@ static inline void xfrm_dst_destroy(struct xfrm_dst *xdst)
|
||||
|
||||
extern void xfrm_dst_ifdown(struct dst_entry *dst, struct net_device *dev);
|
||||
|
||||
struct sec_path
|
||||
{
|
||||
struct sec_path {
|
||||
atomic_t refcnt;
|
||||
int len;
|
||||
struct xfrm_state *xvec[XFRM_MAX_DEPTH];
|
||||
@@ -1500,9 +1494,6 @@ struct scatterlist;
|
||||
typedef int (icv_update_fn_t)(struct hash_desc *, struct scatterlist *,
|
||||
unsigned int);
|
||||
|
||||
extern int skb_icv_walk(const struct sk_buff *skb, struct hash_desc *tfm,
|
||||
int offset, int len, icv_update_fn_t icv_update);
|
||||
|
||||
static inline int xfrm_addr_cmp(xfrm_address_t *a, xfrm_address_t *b,
|
||||
int family)
|
||||
{
|
||||
@@ -1541,12 +1532,22 @@ static inline int xfrm_alg_len(struct xfrm_algo *alg)
|
||||
return sizeof(*alg) + ((alg->alg_key_len + 7) / 8);
|
||||
}
|
||||
|
||||
static inline int xfrm_alg_auth_len(struct xfrm_algo_auth *alg)
|
||||
{
|
||||
return sizeof(*alg) + ((alg->alg_key_len + 7) / 8);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_XFRM_MIGRATE
|
||||
static inline struct xfrm_algo *xfrm_algo_clone(struct xfrm_algo *orig)
|
||||
{
|
||||
return kmemdup(orig, xfrm_alg_len(orig), GFP_KERNEL);
|
||||
}
|
||||
|
||||
static inline struct xfrm_algo_auth *xfrm_algo_auth_clone(struct xfrm_algo_auth *orig)
|
||||
{
|
||||
return kmemdup(orig, xfrm_alg_auth_len(orig), GFP_KERNEL);
|
||||
}
|
||||
|
||||
static inline void xfrm_states_put(struct xfrm_state **states, int n)
|
||||
{
|
||||
int i;
|
||||
|
Reference in New Issue
Block a user