Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.26
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.26: (1090 commits) [NET]: Fix and allocate less memory for ->priv'less netdevices [IPV6]: Fix dangling references on error in fib6_add(). [NETLABEL]: Fix NULL deref in netlbl_unlabel_staticlist_gen() if ifindex not found [PKT_SCHED]: Fix datalen check in tcf_simp_init(). [INET]: Uninline the __inet_inherit_port call. [INET]: Drop the inet_inherit_port() call. SCTP: Initialize partial_bytes_acked to 0, when all of the data is acked. [netdrvr] forcedeth: internal simplifications; changelog removal phylib: factor out get_phy_id from within get_phy_device PHY: add BCM5464 support to broadcom PHY driver cxgb3: Fix __must_check warning with dev_dbg. tc35815: Statistics cleanup natsemi: fix MMIO for PPC 44x platforms [TIPC]: Cleanup of TIPC reference table code [TIPC]: Optimized initialization of TIPC reference table [TIPC]: Remove inlining of reference table locking routines e1000: convert uint16_t style integers to u16 ixgb: convert uint16_t style integers to u16 sb1000.c: make const arrays static sb1000.c: stop inlining largish static functions ...
This commit is contained in:
@@ -231,7 +231,6 @@ unifdef-y += if_pppol2tp.h
|
||||
unifdef-y += if_pppox.h
|
||||
unifdef-y += if_tr.h
|
||||
unifdef-y += if_vlan.h
|
||||
unifdef-y += if_wanpipe.h
|
||||
unifdef-y += igmp.h
|
||||
unifdef-y += inet_diag.h
|
||||
unifdef-y += in.h
|
||||
@@ -261,6 +260,7 @@ unifdef-y += mempolicy.h
|
||||
unifdef-y += mii.h
|
||||
unifdef-y += mman.h
|
||||
unifdef-y += mroute.h
|
||||
unifdef-y += mroute6.h
|
||||
unifdef-y += msdos_fs.h
|
||||
unifdef-y += msg.h
|
||||
unifdef-y += nbd.h
|
||||
@@ -289,6 +289,7 @@ unifdef-y += parport.h
|
||||
unifdef-y += patchkey.h
|
||||
unifdef-y += pci.h
|
||||
unifdef-y += personality.h
|
||||
unifdef-y += pim.h
|
||||
unifdef-y += pktcdvd.h
|
||||
unifdef-y += pmu.h
|
||||
unifdef-y += poll.h
|
||||
|
||||
@@ -283,8 +283,8 @@ struct arcnet_local {
|
||||
int next_buf, first_free_buf;
|
||||
|
||||
/* network "reconfiguration" handling */
|
||||
time_t first_recon, /* time of "first" RECON message to count */
|
||||
last_recon; /* time of most recent RECON */
|
||||
unsigned long first_recon; /* time of "first" RECON message to count */
|
||||
unsigned long last_recon; /* time of most recent RECON */
|
||||
int num_recons; /* number of RECONs between first and last. */
|
||||
bool network_down; /* do we think the network is down? */
|
||||
|
||||
|
||||
@@ -85,8 +85,6 @@ static inline struct atalk_sock *at_sk(struct sock *sk)
|
||||
return (struct atalk_sock *)sk;
|
||||
}
|
||||
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
struct ddpehdr {
|
||||
__be16 deh_len_hops; /* lower 10 bits are length, next 4 - hops */
|
||||
__be16 deh_sum;
|
||||
|
||||
+18
-17
@@ -37,21 +37,6 @@ struct sock_fprog /* Required for SO_ATTACH_FILTER. */
|
||||
struct sock_filter __user *filter;
|
||||
};
|
||||
|
||||
#ifdef __KERNEL__
|
||||
struct sk_filter
|
||||
{
|
||||
atomic_t refcnt;
|
||||
unsigned int len; /* Number of filter blocks */
|
||||
struct rcu_head rcu;
|
||||
struct sock_filter insns[0];
|
||||
};
|
||||
|
||||
static inline unsigned int sk_filter_len(struct sk_filter *fp)
|
||||
{
|
||||
return fp->len*sizeof(struct sock_filter) + sizeof(*fp);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Instruction classes
|
||||
*/
|
||||
@@ -136,15 +121,31 @@ static inline unsigned int sk_filter_len(struct sk_filter *fp)
|
||||
#define SKF_AD_PROTOCOL 0
|
||||
#define SKF_AD_PKTTYPE 4
|
||||
#define SKF_AD_IFINDEX 8
|
||||
#define SKF_AD_MAX 12
|
||||
#define SKF_AD_NLATTR 12
|
||||
#define SKF_AD_MAX 16
|
||||
#define SKF_NET_OFF (-0x100000)
|
||||
#define SKF_LL_OFF (-0x200000)
|
||||
|
||||
#ifdef __KERNEL__
|
||||
struct sk_filter
|
||||
{
|
||||
atomic_t refcnt;
|
||||
unsigned int len; /* Number of filter blocks */
|
||||
struct rcu_head rcu;
|
||||
struct sock_filter insns[0];
|
||||
};
|
||||
|
||||
static inline unsigned int sk_filter_len(const struct sk_filter *fp)
|
||||
{
|
||||
return fp->len * sizeof(struct sock_filter) + sizeof(*fp);
|
||||
}
|
||||
|
||||
struct sk_buff;
|
||||
struct sock;
|
||||
|
||||
extern unsigned int sk_run_filter(struct sk_buff *skb, struct sock_filter *filter, int flen);
|
||||
extern int sk_filter(struct sock *sk, struct sk_buff *skb);
|
||||
extern unsigned int sk_run_filter(struct sk_buff *skb,
|
||||
struct sock_filter *filter, int flen);
|
||||
extern int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk);
|
||||
extern int sk_detach_filter(struct sock *sk);
|
||||
extern int sk_chk_filter(struct sock_filter *filter, int flen);
|
||||
|
||||
@@ -50,7 +50,7 @@ struct gianfar_platform_data {
|
||||
u32 device_flags;
|
||||
/* board specific information */
|
||||
u32 board_flags;
|
||||
u32 bus_id;
|
||||
char bus_id[MII_BUS_ID_SIZE];
|
||||
u32 phy_id;
|
||||
u8 mac_addr[6];
|
||||
phy_interface_t interface;
|
||||
|
||||
+10
-1
@@ -176,12 +176,21 @@ extern void icmpv6_send(struct sk_buff *skb,
|
||||
__u32 info,
|
||||
struct net_device *dev);
|
||||
|
||||
extern int icmpv6_init(struct net_proto_family *ops);
|
||||
extern int icmpv6_init(void);
|
||||
extern int icmpv6_err_convert(int type, int code,
|
||||
int *err);
|
||||
extern void icmpv6_cleanup(void);
|
||||
extern void icmpv6_param_prob(struct sk_buff *skb,
|
||||
int code, int pos);
|
||||
|
||||
struct flowi;
|
||||
struct in6_addr;
|
||||
extern void icmpv6_flow_init(struct sock *sk,
|
||||
struct flowi *fl,
|
||||
u8 type,
|
||||
const struct in6_addr *saddr,
|
||||
const struct in6_addr *daddr,
|
||||
int oif);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -97,6 +97,7 @@
|
||||
#define IEEE80211_MAX_FRAME_LEN 2352
|
||||
|
||||
#define IEEE80211_MAX_SSID_LEN 32
|
||||
#define IEEE80211_MAX_MESH_ID_LEN 32
|
||||
|
||||
struct ieee80211_hdr {
|
||||
__le16 frame_control;
|
||||
@@ -109,6 +110,16 @@ struct ieee80211_hdr {
|
||||
} __attribute__ ((packed));
|
||||
|
||||
|
||||
struct ieee80211s_hdr {
|
||||
u8 flags;
|
||||
u8 ttl;
|
||||
u8 seqnum[3];
|
||||
u8 eaddr1[6];
|
||||
u8 eaddr2[6];
|
||||
u8 eaddr3[6];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
|
||||
struct ieee80211_mgmt {
|
||||
__le16 frame_control;
|
||||
__le16 duration;
|
||||
@@ -206,6 +217,23 @@ struct ieee80211_mgmt {
|
||||
__le16 params;
|
||||
__le16 reason_code;
|
||||
} __attribute__((packed)) delba;
|
||||
struct{
|
||||
u8 action_code;
|
||||
/* capab_info for open and confirm,
|
||||
* reason for close
|
||||
*/
|
||||
__le16 aux;
|
||||
/* Followed in plink_confirm by status
|
||||
* code, AID and supported rates,
|
||||
* and directly by supported rates in
|
||||
* plink_open and plink_close
|
||||
*/
|
||||
u8 variable[0];
|
||||
} __attribute__((packed)) plink_action;
|
||||
struct{
|
||||
u8 action_code;
|
||||
u8 variable[0];
|
||||
} __attribute__((packed)) mesh_action;
|
||||
} u;
|
||||
} __attribute__ ((packed)) action;
|
||||
} u;
|
||||
@@ -437,6 +465,13 @@ enum ieee80211_eid {
|
||||
WLAN_EID_TS_DELAY = 43,
|
||||
WLAN_EID_TCLAS_PROCESSING = 44,
|
||||
WLAN_EID_QOS_CAPA = 46,
|
||||
/* 802.11s */
|
||||
WLAN_EID_MESH_CONFIG = 36, /* Pending IEEE 802.11 ANA approval */
|
||||
WLAN_EID_MESH_ID = 37, /* Pending IEEE 802.11 ANA approval */
|
||||
WLAN_EID_PEER_LINK = 40, /* Pending IEEE 802.11 ANA approval */
|
||||
WLAN_EID_PREQ = 53, /* Pending IEEE 802.11 ANA approval */
|
||||
WLAN_EID_PREP = 54, /* Pending IEEE 802.11 ANA approval */
|
||||
WLAN_EID_PERR = 55, /* Pending IEEE 802.11 ANA approval */
|
||||
/* 802.11h */
|
||||
WLAN_EID_PWR_CONSTRAINT = 32,
|
||||
WLAN_EID_PWR_CAPABILITY = 33,
|
||||
|
||||
@@ -156,6 +156,12 @@ static inline struct arphdr *arp_hdr(const struct sk_buff *skb)
|
||||
{
|
||||
return (struct arphdr *)skb_network_header(skb);
|
||||
}
|
||||
|
||||
static inline int arp_hdr_len(struct net_device *dev)
|
||||
{
|
||||
/* ARP header, plus 2 device addresses, plus 2 IP addresses. */
|
||||
return sizeof(struct arphdr) + (dev->addr_len + sizeof(u32)) * 2;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_IF_ARP_H */
|
||||
|
||||
@@ -7,6 +7,10 @@
|
||||
#define SIOCADDTUNNEL (SIOCDEVPRIVATE + 1)
|
||||
#define SIOCDELTUNNEL (SIOCDEVPRIVATE + 2)
|
||||
#define SIOCCHGTUNNEL (SIOCDEVPRIVATE + 3)
|
||||
#define SIOCGETPRL (SIOCDEVPRIVATE + 4)
|
||||
#define SIOCADDPRL (SIOCDEVPRIVATE + 5)
|
||||
#define SIOCDELPRL (SIOCDEVPRIVATE + 6)
|
||||
#define SIOCCHGPRL (SIOCDEVPRIVATE + 7)
|
||||
|
||||
#define GRE_CSUM __constant_htons(0x8000)
|
||||
#define GRE_ROUTING __constant_htons(0x4000)
|
||||
@@ -17,9 +21,6 @@
|
||||
#define GRE_FLAGS __constant_htons(0x00F8)
|
||||
#define GRE_VERSION __constant_htons(0x0007)
|
||||
|
||||
/* i_flags values for SIT mode */
|
||||
#define SIT_ISATAP 0x0001
|
||||
|
||||
struct ip_tunnel_parm
|
||||
{
|
||||
char name[IFNAMSIZ];
|
||||
@@ -31,4 +32,19 @@ struct ip_tunnel_parm
|
||||
struct iphdr iph;
|
||||
};
|
||||
|
||||
/* SIT-mode i_flags */
|
||||
#define SIT_ISATAP 0x0001
|
||||
|
||||
struct ip_tunnel_prl {
|
||||
__be32 addr;
|
||||
__u16 flags;
|
||||
__u16 __reserved;
|
||||
__u32 datalen;
|
||||
__u32 __reserved2;
|
||||
void __user *data;
|
||||
};
|
||||
|
||||
/* PRL flags */
|
||||
#define PRL_DEFAULT 0x0001
|
||||
|
||||
#endif /* _IF_TUNNEL_H_ */
|
||||
|
||||
@@ -81,7 +81,9 @@ extern void vlan_ioctl_set(int (*hook)(struct net *, void __user *));
|
||||
#define VLAN_GROUP_ARRAY_PART_LEN (VLAN_GROUP_ARRAY_LEN/VLAN_GROUP_ARRAY_SPLIT_PARTS)
|
||||
|
||||
struct vlan_group {
|
||||
int real_dev_ifindex; /* The ifindex of the ethernet(like) device the vlan is attached to. */
|
||||
struct net_device *real_dev; /* The ethernet(like) device
|
||||
* the vlan is attached to.
|
||||
*/
|
||||
unsigned int nr_vlans;
|
||||
struct hlist_node hlist; /* linked list */
|
||||
struct net_device **vlan_devices_arrays[VLAN_GROUP_ARRAY_SPLIT_PARTS];
|
||||
@@ -93,7 +95,7 @@ static inline struct net_device *vlan_group_get_device(struct vlan_group *vg,
|
||||
{
|
||||
struct net_device **array;
|
||||
array = vg->vlan_devices_arrays[vlan_id / VLAN_GROUP_ARRAY_PART_LEN];
|
||||
return array[vlan_id % VLAN_GROUP_ARRAY_PART_LEN];
|
||||
return array ? array[vlan_id % VLAN_GROUP_ARRAY_PART_LEN] : NULL;
|
||||
}
|
||||
|
||||
static inline void vlan_group_set_device(struct vlan_group *vg,
|
||||
|
||||
@@ -1,124 +0,0 @@
|
||||
/*****************************************************************************
|
||||
* if_wanpipe.h Header file for the Sangoma AF_WANPIPE Socket
|
||||
*
|
||||
* Author: Nenad Corbic
|
||||
*
|
||||
* Copyright: (c) 2000 Sangoma Technologies Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version
|
||||
* 2 of the License, or (at your option) any later version.
|
||||
* ============================================================================
|
||||
*
|
||||
* Jan 28, 2000 Nenad Corbic Initial Version
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __LINUX_IF_WAN_PACKET_H
|
||||
#define __LINUX_IF_WAN_PACKET_H
|
||||
|
||||
struct wan_sockaddr_ll
|
||||
{
|
||||
unsigned short sll_family;
|
||||
unsigned short sll_protocol;
|
||||
int sll_ifindex;
|
||||
unsigned short sll_hatype;
|
||||
unsigned char sll_pkttype;
|
||||
unsigned char sll_halen;
|
||||
unsigned char sll_addr[8];
|
||||
unsigned char sll_device[14];
|
||||
unsigned char sll_card[14];
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned char free;
|
||||
unsigned char state_sk;
|
||||
int rcvbuf;
|
||||
int sndbuf;
|
||||
int rmem;
|
||||
int wmem;
|
||||
int sk_count;
|
||||
unsigned char bound;
|
||||
char name[14];
|
||||
unsigned char d_state;
|
||||
unsigned char svc;
|
||||
unsigned short lcn;
|
||||
unsigned char mbox;
|
||||
unsigned char cmd_busy;
|
||||
unsigned char command;
|
||||
unsigned poll;
|
||||
unsigned poll_cnt;
|
||||
int rblock;
|
||||
} wan_debug_hdr_t;
|
||||
|
||||
#define MAX_NUM_DEBUG 10
|
||||
#define X25_PROT 0x16
|
||||
#define PVC_PROT 0x17
|
||||
|
||||
typedef struct
|
||||
{
|
||||
wan_debug_hdr_t debug[MAX_NUM_DEBUG];
|
||||
}wan_debug_t;
|
||||
|
||||
#define SIOC_WANPIPE_GET_CALL_DATA (SIOCPROTOPRIVATE + 0)
|
||||
#define SIOC_WANPIPE_SET_CALL_DATA (SIOCPROTOPRIVATE + 1)
|
||||
#define SIOC_WANPIPE_ACCEPT_CALL (SIOCPROTOPRIVATE + 2)
|
||||
#define SIOC_WANPIPE_CLEAR_CALL (SIOCPROTOPRIVATE + 3)
|
||||
#define SIOC_WANPIPE_RESET_CALL (SIOCPROTOPRIVATE + 4)
|
||||
#define SIOC_WANPIPE_DEBUG (SIOCPROTOPRIVATE + 5)
|
||||
#define SIOC_WANPIPE_SET_NONBLOCK (SIOCPROTOPRIVATE + 6)
|
||||
#define SIOC_WANPIPE_CHECK_TX (SIOCPROTOPRIVATE + 7)
|
||||
#define SIOC_WANPIPE_SOCK_STATE (SIOCPROTOPRIVATE + 8)
|
||||
|
||||
/* Packet types */
|
||||
|
||||
#define WAN_PACKET_HOST 0 /* To us */
|
||||
#define WAN_PACKET_BROADCAST 1 /* To all */
|
||||
#define WAN_PACKET_MULTICAST 2 /* To group */
|
||||
#define WAN_PACKET_OTHERHOST 3 /* To someone else */
|
||||
#define WAN_PACKET_OUTGOING 4 /* Outgoing of any type */
|
||||
/* These ones are invisible by user level */
|
||||
#define WAN_PACKET_LOOPBACK 5 /* MC/BRD frame looped back */
|
||||
#define WAN_PACKET_FASTROUTE 6 /* Fastrouted frame */
|
||||
|
||||
|
||||
/* X25 specific */
|
||||
#define WAN_PACKET_DATA 7
|
||||
#define WAN_PACKET_CMD 8
|
||||
#define WAN_PACKET_ASYNC 9
|
||||
#define WAN_PACKET_ERR 10
|
||||
|
||||
/* Packet socket options */
|
||||
|
||||
#define WAN_PACKET_ADD_MEMBERSHIP 1
|
||||
#define WAN_PACKET_DROP_MEMBERSHIP 2
|
||||
|
||||
#define WAN_PACKET_MR_MULTICAST 0
|
||||
#define WAN_PACKET_MR_PROMISC 1
|
||||
#define WAN_PACKET_MR_ALLMULTI 2
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
/* Private wanpipe socket structures. */
|
||||
struct wanpipe_opt
|
||||
{
|
||||
void *mbox; /* Mail box */
|
||||
void *card; /* Card bouded to */
|
||||
struct net_device *dev; /* Bounded device */
|
||||
unsigned short lcn; /* Binded LCN */
|
||||
unsigned char svc; /* 0=pvc, 1=svc */
|
||||
unsigned char timer; /* flag for delayed transmit*/
|
||||
struct timer_list tx_timer;
|
||||
unsigned poll_cnt;
|
||||
unsigned char force; /* Used to force sock release */
|
||||
atomic_t packet_sent;
|
||||
unsigned short num;
|
||||
};
|
||||
|
||||
#define wp_sk(__sk) ((struct wanpipe_opt *)(__sk)->sk_protinfo)
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
+17
-21
@@ -80,27 +80,6 @@ struct igmpv3_query {
|
||||
__be32 srcs[0];
|
||||
};
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/skbuff.h>
|
||||
|
||||
static inline struct igmphdr *igmp_hdr(const struct sk_buff *skb)
|
||||
{
|
||||
return (struct igmphdr *)skb_transport_header(skb);
|
||||
}
|
||||
|
||||
static inline struct igmpv3_report *
|
||||
igmpv3_report_hdr(const struct sk_buff *skb)
|
||||
{
|
||||
return (struct igmpv3_report *)skb_transport_header(skb);
|
||||
}
|
||||
|
||||
static inline struct igmpv3_query *
|
||||
igmpv3_query_hdr(const struct sk_buff *skb)
|
||||
{
|
||||
return (struct igmpv3_query *)skb_transport_header(skb);
|
||||
}
|
||||
#endif
|
||||
|
||||
#define IGMP_HOST_MEMBERSHIP_QUERY 0x11 /* From RFC1112 */
|
||||
#define IGMP_HOST_MEMBERSHIP_REPORT 0x12 /* Ditto */
|
||||
#define IGMP_DVMRP 0x13 /* DVMRP routing */
|
||||
@@ -151,6 +130,23 @@ static inline struct igmpv3_query *
|
||||
#include <linux/timer.h>
|
||||
#include <linux/in.h>
|
||||
|
||||
static inline struct igmphdr *igmp_hdr(const struct sk_buff *skb)
|
||||
{
|
||||
return (struct igmphdr *)skb_transport_header(skb);
|
||||
}
|
||||
|
||||
static inline struct igmpv3_report *
|
||||
igmpv3_report_hdr(const struct sk_buff *skb)
|
||||
{
|
||||
return (struct igmpv3_report *)skb_transport_header(skb);
|
||||
}
|
||||
|
||||
static inline struct igmpv3_query *
|
||||
igmpv3_query_hdr(const struct sk_buff *skb)
|
||||
{
|
||||
return (struct igmpv3_query *)skb_transport_header(skb);
|
||||
}
|
||||
|
||||
extern int sysctl_igmp_max_memberships;
|
||||
extern int sysctl_igmp_max_msf;
|
||||
|
||||
|
||||
@@ -48,6 +48,14 @@ extern const struct in6_addr in6addr_any;
|
||||
#define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } }
|
||||
extern const struct in6_addr in6addr_loopback;
|
||||
#define IN6ADDR_LOOPBACK_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } }
|
||||
#ifdef __KERNEL__
|
||||
extern const struct in6_addr in6addr_linklocal_allnodes;
|
||||
#define IN6ADDR_LINKLOCAL_ALLNODES_INIT \
|
||||
{ { { 0xff,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } }
|
||||
extern const struct in6_addr in6addr_linklocal_allrouters;
|
||||
#define IN6ADDR_LINKLOCAL_ALLROUTERS_INIT \
|
||||
{ { { 0xff,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2 } } }
|
||||
#endif
|
||||
|
||||
struct sockaddr_in6 {
|
||||
unsigned short int sin6_family; /* AF_INET6 */
|
||||
@@ -249,4 +257,30 @@ struct in6_flowlabel_req
|
||||
* IP6T_SO_GET_REVISION_TARGET 69
|
||||
*/
|
||||
|
||||
/* RFC5014: Source address selection */
|
||||
#define IPV6_ADDR_PREFERENCES 72
|
||||
|
||||
#define IPV6_PREFER_SRC_TMP 0x0001
|
||||
#define IPV6_PREFER_SRC_PUBLIC 0x0002
|
||||
#define IPV6_PREFER_SRC_PUBTMP_DEFAULT 0x0100
|
||||
#define IPV6_PREFER_SRC_COA 0x0004
|
||||
#define IPV6_PREFER_SRC_HOME 0x0400
|
||||
#define IPV6_PREFER_SRC_CGA 0x0008
|
||||
#define IPV6_PREFER_SRC_NONCGA 0x0800
|
||||
|
||||
/*
|
||||
* Multicast Routing:
|
||||
* see include/linux/mroute6.h.
|
||||
*
|
||||
* MRT6_INIT 200
|
||||
* MRT6_DONE 201
|
||||
* MRT6_ADD_MIF 202
|
||||
* MRT6_DEL_MIF 203
|
||||
* MRT6_ADD_MFC 204
|
||||
* MRT6_DEL_MFC 205
|
||||
* MRT6_VERSION 206
|
||||
* MRT6_ASSERT 207
|
||||
* MRT6_PIM 208
|
||||
* (reserved) 209
|
||||
*/
|
||||
#endif
|
||||
|
||||
@@ -70,13 +70,13 @@ static inline void ipv4_devconf_setall(struct in_device *in_dev)
|
||||
ipv4_devconf_set((in_dev), NET_IPV4_CONF_ ## attr, (val))
|
||||
|
||||
#define IN_DEV_ANDCONF(in_dev, attr) \
|
||||
(IPV4_DEVCONF_ALL(in_dev->dev->nd_net, attr) && \
|
||||
(IPV4_DEVCONF_ALL(dev_net(in_dev->dev), attr) && \
|
||||
IN_DEV_CONF_GET((in_dev), attr))
|
||||
#define IN_DEV_ORCONF(in_dev, attr) \
|
||||
(IPV4_DEVCONF_ALL(in_dev->dev->nd_net, attr) || \
|
||||
(IPV4_DEVCONF_ALL(dev_net(in_dev->dev), attr) || \
|
||||
IN_DEV_CONF_GET((in_dev), attr))
|
||||
#define IN_DEV_MAXCONF(in_dev, attr) \
|
||||
(max(IPV4_DEVCONF_ALL(in_dev->dev->nd_net, attr), \
|
||||
(max(IPV4_DEVCONF_ALL(dev_net(in_dev->dev), attr), \
|
||||
IN_DEV_CONF_GET((in_dev), attr)))
|
||||
|
||||
#define IN_DEV_FORWARD(in_dev) IN_DEV_CONF_GET((in_dev), FORWARDING)
|
||||
@@ -129,7 +129,7 @@ extern int unregister_inetaddr_notifier(struct notifier_block *nb);
|
||||
|
||||
extern struct net_device *ip_dev_find(struct net *net, __be32 addr);
|
||||
extern int inet_addr_onlink(struct in_device *in_dev, __be32 a, __be32 b);
|
||||
extern int devinet_ioctl(unsigned int cmd, void __user *);
|
||||
extern int devinet_ioctl(struct net *net, unsigned int cmd, void __user *);
|
||||
extern void devinet_init(void);
|
||||
extern struct in_device *inetdev_by_index(struct net *, int);
|
||||
extern __be32 inet_select_addr(const struct net_device *dev, __be32 dst, int scope);
|
||||
|
||||
+38
-10
@@ -159,6 +159,9 @@ struct ipv6_devconf {
|
||||
__s32 accept_source_route;
|
||||
#ifdef CONFIG_IPV6_OPTIMISTIC_DAD
|
||||
__s32 optimistic_dad;
|
||||
#endif
|
||||
#ifdef CONFIG_IPV6_MROUTE
|
||||
__s32 mc_forwarding;
|
||||
#endif
|
||||
void *sysctl;
|
||||
};
|
||||
@@ -190,6 +193,7 @@ enum {
|
||||
DEVCONF_PROXY_NDP,
|
||||
DEVCONF_OPTIMISTIC_DAD,
|
||||
DEVCONF_ACCEPT_SOURCE_ROUTE,
|
||||
DEVCONF_MC_FORWARDING,
|
||||
DEVCONF_MAX
|
||||
};
|
||||
|
||||
@@ -230,6 +234,7 @@ struct inet6_skb_parm {
|
||||
#endif
|
||||
|
||||
#define IP6SKB_XFRM_TRANSFORMED 1
|
||||
#define IP6SKB_FORWARDED 2
|
||||
};
|
||||
|
||||
#define IP6CB(skb) ((struct inet6_skb_parm*)((skb)->cb))
|
||||
@@ -274,8 +279,29 @@ struct ipv6_pinfo {
|
||||
|
||||
__be32 flow_label;
|
||||
__u32 frag_size;
|
||||
__s16 hop_limit;
|
||||
__s16 mcast_hops;
|
||||
|
||||
/*
|
||||
* Packed in 16bits.
|
||||
* Omit one shift by by putting the signed field at MSB.
|
||||
*/
|
||||
#if defined(__BIG_ENDIAN_BITFIELD)
|
||||
__s16 hop_limit:9;
|
||||
__u16 __unused_1:7;
|
||||
#else
|
||||
__u16 __unused_1:7;
|
||||
__s16 hop_limit:9;
|
||||
#endif
|
||||
|
||||
#if defined(__BIG_ENDIAN_BITFIELD)
|
||||
/* Packed in 16bits. */
|
||||
__s16 mcast_hops:9;
|
||||
__u16 __unused_2:6,
|
||||
mc_loop:1;
|
||||
#else
|
||||
__u16 mc_loop:1,
|
||||
__unused_2:6;
|
||||
__s16 mcast_hops:9;
|
||||
#endif
|
||||
int mcast_oif;
|
||||
|
||||
/* pktoption flags */
|
||||
@@ -298,11 +324,14 @@ struct ipv6_pinfo {
|
||||
} rxopt;
|
||||
|
||||
/* sockopt flags */
|
||||
__u8 mc_loop:1,
|
||||
recverr:1,
|
||||
__u8 recverr:1,
|
||||
sndflow:1,
|
||||
pmtudisc:2,
|
||||
ipv6only:1;
|
||||
ipv6only:1,
|
||||
srcprefs:3; /* 001: prefer temporary address
|
||||
* 010: prefer public address
|
||||
* 100: prefer care-of address
|
||||
*/
|
||||
__u8 tclass;
|
||||
|
||||
__u32 dst_cookie;
|
||||
@@ -315,9 +344,8 @@ struct ipv6_pinfo {
|
||||
struct sk_buff *pktoptions;
|
||||
struct {
|
||||
struct ipv6_txoptions *opt;
|
||||
struct rt6_info *rt;
|
||||
int hop_limit;
|
||||
int tclass;
|
||||
u8 hop_limit;
|
||||
u8 tclass;
|
||||
} cork;
|
||||
};
|
||||
|
||||
@@ -458,7 +486,7 @@ static inline struct raw6_sock *raw6_sk(const struct sock *sk)
|
||||
#endif /* defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) */
|
||||
|
||||
#define INET6_MATCH(__sk, __net, __hash, __saddr, __daddr, __ports, __dif)\
|
||||
(((__sk)->sk_hash == (__hash)) && ((__sk)->sk_net == (__net)) && \
|
||||
(((__sk)->sk_hash == (__hash)) && sock_net((__sk)) == (__net) && \
|
||||
((*((__portpair *)&(inet_sk(__sk)->dport))) == (__ports)) && \
|
||||
((__sk)->sk_family == AF_INET6) && \
|
||||
ipv6_addr_equal(&inet6_sk(__sk)->daddr, (__saddr)) && \
|
||||
@@ -466,7 +494,7 @@ static inline struct raw6_sock *raw6_sk(const struct sock *sk)
|
||||
(!((__sk)->sk_bound_dev_if) || ((__sk)->sk_bound_dev_if == (__dif))))
|
||||
|
||||
#define INET6_TW_MATCH(__sk, __net, __hash, __saddr, __daddr, __ports, __dif) \
|
||||
(((__sk)->sk_hash == (__hash)) && ((__sk)->sk_net == (__net)) && \
|
||||
(((__sk)->sk_hash == (__hash)) && sock_net((__sk)) == (__net) && \
|
||||
(*((__portpair *)&(inet_twsk(__sk)->tw_dport)) == (__ports)) && \
|
||||
((__sk)->sk_family == PF_INET6) && \
|
||||
(ipv6_addr_equal(&inet6_twsk(__sk)->tw_v6_daddr, (__saddr))) && \
|
||||
|
||||
@@ -16,14 +16,8 @@
|
||||
|
||||
#include <linux/ioctl.h>
|
||||
|
||||
#ifdef CONFIG_COBALT_MICRO_SERVER
|
||||
/* Save memory */
|
||||
#define ISDN_MAX_DRIVERS 2
|
||||
#define ISDN_MAX_CHANNELS 8
|
||||
#else
|
||||
#define ISDN_MAX_DRIVERS 32
|
||||
#define ISDN_MAX_CHANNELS 64
|
||||
#endif
|
||||
|
||||
/* New ioctl-codes */
|
||||
#define IIOCNETAIF _IO('I',1)
|
||||
|
||||
+4
-21
@@ -2,7 +2,11 @@
|
||||
#define __LINUX_MROUTE_H
|
||||
|
||||
#include <linux/sockios.h>
|
||||
#include <linux/types.h>
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/in.h>
|
||||
#endif
|
||||
#include <linux/pim.h>
|
||||
|
||||
/*
|
||||
* Based on the MROUTING 3.5 defines primarily to keep
|
||||
@@ -210,27 +214,6 @@ struct mfc_cache
|
||||
#define IGMPMSG_WHOLEPKT 3 /* For PIM Register processing */
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#define PIM_V1_VERSION __constant_htonl(0x10000000)
|
||||
#define PIM_V1_REGISTER 1
|
||||
|
||||
#define PIM_VERSION 2
|
||||
#define PIM_REGISTER 1
|
||||
|
||||
#define PIM_NULL_REGISTER __constant_htonl(0x40000000)
|
||||
|
||||
/* PIMv2 register message header layout (ietf-draft-idmr-pimvsm-v2-00.ps */
|
||||
|
||||
struct pimreghdr
|
||||
{
|
||||
__u8 type;
|
||||
__u8 reserved;
|
||||
__be16 csum;
|
||||
__be32 flags;
|
||||
};
|
||||
|
||||
extern int pim_rcv_v1(struct sk_buff *);
|
||||
|
||||
struct rtmsg;
|
||||
extern int ipmr_get_route(struct sk_buff *skb, struct rtmsg *rtm, int nowait);
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,228 @@
|
||||
#ifndef __LINUX_MROUTE6_H
|
||||
#define __LINUX_MROUTE6_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/sockios.h>
|
||||
|
||||
/*
|
||||
* Based on the MROUTING 3.5 defines primarily to keep
|
||||
* source compatibility with BSD.
|
||||
*
|
||||
* See the pim6sd code for the original history.
|
||||
*
|
||||
* Protocol Independent Multicast (PIM) data structures included
|
||||
* Carlos Picoto (cap@di.fc.ul.pt)
|
||||
*
|
||||
*/
|
||||
|
||||
#define MRT6_BASE 200
|
||||
#define MRT6_INIT (MRT6_BASE) /* Activate the kernel mroute code */
|
||||
#define MRT6_DONE (MRT6_BASE+1) /* Shutdown the kernel mroute */
|
||||
#define MRT6_ADD_MIF (MRT6_BASE+2) /* Add a virtual interface */
|
||||
#define MRT6_DEL_MIF (MRT6_BASE+3) /* Delete a virtual interface */
|
||||
#define MRT6_ADD_MFC (MRT6_BASE+4) /* Add a multicast forwarding entry */
|
||||
#define MRT6_DEL_MFC (MRT6_BASE+5) /* Delete a multicast forwarding entry */
|
||||
#define MRT6_VERSION (MRT6_BASE+6) /* Get the kernel multicast version */
|
||||
#define MRT6_ASSERT (MRT6_BASE+7) /* Activate PIM assert mode */
|
||||
#define MRT6_PIM (MRT6_BASE+8) /* enable PIM code */
|
||||
|
||||
#define SIOCGETMIFCNT_IN6 SIOCPROTOPRIVATE /* IP protocol privates */
|
||||
#define SIOCGETSGCNT_IN6 (SIOCPROTOPRIVATE+1)
|
||||
#define SIOCGETRPF (SIOCPROTOPRIVATE+2)
|
||||
|
||||
#define MAXMIFS 32
|
||||
typedef unsigned long mifbitmap_t; /* User mode code depends on this lot */
|
||||
typedef unsigned short mifi_t;
|
||||
#define ALL_MIFS ((mifi_t)(-1))
|
||||
|
||||
#ifndef IF_SETSIZE
|
||||
#define IF_SETSIZE 256
|
||||
#endif
|
||||
|
||||
typedef __u32 if_mask;
|
||||
#define NIFBITS (sizeof(if_mask) * 8) /* bits per mask */
|
||||
|
||||
#if !defined(__KERNEL__) && !defined(DIV_ROUND_UP)
|
||||
#define DIV_ROUND_UP(x,y) (((x) + ((y) - 1)) / (y))
|
||||
#endif
|
||||
|
||||
typedef struct if_set {
|
||||
if_mask ifs_bits[DIV_ROUND_UP(IF_SETSIZE, NIFBITS)];
|
||||
} if_set;
|
||||
|
||||
#define IF_SET(n, p) ((p)->ifs_bits[(n)/NIFBITS] |= (1 << ((n) % NIFBITS)))
|
||||
#define IF_CLR(n, p) ((p)->ifs_bits[(n)/NIFBITS] &= ~(1 << ((n) % NIFBITS)))
|
||||
#define IF_ISSET(n, p) ((p)->ifs_bits[(n)/NIFBITS] & (1 << ((n) % NIFBITS)))
|
||||
#define IF_COPY(f, t) bcopy(f, t, sizeof(*(f)))
|
||||
#define IF_ZERO(p) bzero(p, sizeof(*(p)))
|
||||
|
||||
/*
|
||||
* Passed by mrouted for an MRT_ADD_MIF - again we use the
|
||||
* mrouted 3.6 structures for compatibility
|
||||
*/
|
||||
|
||||
struct mif6ctl {
|
||||
mifi_t mif6c_mifi; /* Index of MIF */
|
||||
unsigned char mif6c_flags; /* MIFF_ flags */
|
||||
unsigned char vifc_threshold; /* ttl limit */
|
||||
u_short mif6c_pifi; /* the index of the physical IF */
|
||||
unsigned int vifc_rate_limit; /* Rate limiter values (NI) */
|
||||
};
|
||||
|
||||
#define MIFF_REGISTER 0x1 /* register vif */
|
||||
|
||||
/*
|
||||
* Cache manipulation structures for mrouted and PIMd
|
||||
*/
|
||||
|
||||
struct mf6cctl
|
||||
{
|
||||
struct sockaddr_in6 mf6cc_origin; /* Origin of mcast */
|
||||
struct sockaddr_in6 mf6cc_mcastgrp; /* Group in question */
|
||||
mifi_t mf6cc_parent; /* Where it arrived */
|
||||
struct if_set mf6cc_ifset; /* Where it is going */
|
||||
};
|
||||
|
||||
/*
|
||||
* Group count retrieval for pim6sd
|
||||
*/
|
||||
|
||||
struct sioc_sg_req6
|
||||
{
|
||||
struct sockaddr_in6 src;
|
||||
struct sockaddr_in6 grp;
|
||||
unsigned long pktcnt;
|
||||
unsigned long bytecnt;
|
||||
unsigned long wrong_if;
|
||||
};
|
||||
|
||||
/*
|
||||
* To get vif packet counts
|
||||
*/
|
||||
|
||||
struct sioc_mif_req6
|
||||
{
|
||||
mifi_t mifi; /* Which iface */
|
||||
unsigned long icount; /* In packets */
|
||||
unsigned long ocount; /* Out packets */
|
||||
unsigned long ibytes; /* In bytes */
|
||||
unsigned long obytes; /* Out bytes */
|
||||
};
|
||||
|
||||
/*
|
||||
* That's all usermode folks
|
||||
*/
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/skbuff.h> /* for struct sk_buff_head */
|
||||
|
||||
#ifdef CONFIG_IPV6_MROUTE
|
||||
static inline int ip6_mroute_opt(int opt)
|
||||
{
|
||||
return (opt >= MRT6_BASE) && (opt <= MRT6_BASE + 10);
|
||||
}
|
||||
#else
|
||||
static inline int ip6_mroute_opt(int opt)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
struct sock;
|
||||
|
||||
extern int ip6_mroute_setsockopt(struct sock *, int, char __user *, int);
|
||||
extern int ip6_mroute_getsockopt(struct sock *, int, char __user *, int __user *);
|
||||
extern int ip6_mr_input(struct sk_buff *skb);
|
||||
extern int ip6mr_ioctl(struct sock *sk, int cmd, void __user *arg);
|
||||
extern void ip6_mr_init(void);
|
||||
|
||||
struct mif_device
|
||||
{
|
||||
struct net_device *dev; /* Device we are using */
|
||||
unsigned long bytes_in,bytes_out;
|
||||
unsigned long pkt_in,pkt_out; /* Statistics */
|
||||
unsigned long rate_limit; /* Traffic shaping (NI) */
|
||||
unsigned char threshold; /* TTL threshold */
|
||||
unsigned short flags; /* Control flags */
|
||||
int link; /* Physical interface index */
|
||||
};
|
||||
|
||||
#define VIFF_STATIC 0x8000
|
||||
|
||||
struct mfc6_cache
|
||||
{
|
||||
struct mfc6_cache *next; /* Next entry on cache line */
|
||||
struct in6_addr mf6c_mcastgrp; /* Group the entry belongs to */
|
||||
struct in6_addr mf6c_origin; /* Source of packet */
|
||||
mifi_t mf6c_parent; /* Source interface */
|
||||
int mfc_flags; /* Flags on line */
|
||||
|
||||
union {
|
||||
struct {
|
||||
unsigned long expires;
|
||||
struct sk_buff_head unresolved; /* Unresolved buffers */
|
||||
} unres;
|
||||
struct {
|
||||
unsigned long last_assert;
|
||||
int minvif;
|
||||
int maxvif;
|
||||
unsigned long bytes;
|
||||
unsigned long pkt;
|
||||
unsigned long wrong_if;
|
||||
unsigned char ttls[MAXMIFS]; /* TTL thresholds */
|
||||
} res;
|
||||
} mfc_un;
|
||||
};
|
||||
|
||||
#define MFC_STATIC 1
|
||||
#define MFC_NOTIFY 2
|
||||
|
||||
#define MFC6_LINES 64
|
||||
|
||||
#define MFC6_HASH(a, g) (((__force u32)(a)->s6_addr32[0] ^ \
|
||||
(__force u32)(a)->s6_addr32[1] ^ \
|
||||
(__force u32)(a)->s6_addr32[2] ^ \
|
||||
(__force u32)(a)->s6_addr32[3] ^ \
|
||||
(__force u32)(g)->s6_addr32[0] ^ \
|
||||
(__force u32)(g)->s6_addr32[1] ^ \
|
||||
(__force u32)(g)->s6_addr32[2] ^ \
|
||||
(__force u32)(g)->s6_addr32[3]) % MFC6_LINES)
|
||||
|
||||
#define MFC_ASSERT_THRESH (3*HZ) /* Maximal freq. of asserts */
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __KERNEL__
|
||||
struct rtmsg;
|
||||
extern int ip6mr_get_route(struct sk_buff *skb, struct rtmsg *rtm, int nowait);
|
||||
|
||||
#ifdef CONFIG_IPV6_MROUTE
|
||||
extern struct sock *mroute6_socket;
|
||||
extern int ip6mr_sk_done(struct sock *sk);
|
||||
#else
|
||||
#define mroute6_socket NULL
|
||||
static inline int ip6mr_sk_done(struct sock *sk) { return 0; }
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Structure used to communicate from kernel to multicast router.
|
||||
* We'll overlay the structure onto an MLD header (not an IPv6 heder like igmpmsg{}
|
||||
* used for IPv4 implementation). This is because this structure will be passed via an
|
||||
* IPv6 raw socket, on wich an application will only receiver the payload i.e the data after
|
||||
* the IPv6 header and all the extension headers. (See section 3 of RFC 3542)
|
||||
*/
|
||||
|
||||
struct mrt6msg {
|
||||
#define MRT6MSG_NOCACHE 1
|
||||
#define MRT6MSG_WRONGMIF 2
|
||||
#define MRT6MSG_WHOLEPKT 3 /* used for use level encap */
|
||||
__u8 im6_mbz; /* must be zero */
|
||||
__u8 im6_msgtype; /* what type of message */
|
||||
__u16 im6_mif; /* mif rec'd on */
|
||||
__u32 im6_pad; /* padding for 64 bit arch */
|
||||
struct in6_addr im6_src, im6_dst;
|
||||
};
|
||||
|
||||
#endif
|
||||
+2
-1
@@ -19,6 +19,7 @@
|
||||
#define _LINUX_NET_H
|
||||
|
||||
#include <linux/wait.h>
|
||||
#include <linux/socket.h>
|
||||
#include <asm/socket.h>
|
||||
|
||||
struct poll_table_struct;
|
||||
@@ -26,7 +27,7 @@ struct pipe_inode_info;
|
||||
struct inode;
|
||||
struct net;
|
||||
|
||||
#define NPROTO 34 /* should be enough for now.. */
|
||||
#define NPROTO AF_MAX
|
||||
|
||||
#define SYS_SOCKET 1 /* sys_socket(2) */
|
||||
#define SYS_BIND 2 /* sys_bind(2) */
|
||||
|
||||
@@ -710,8 +710,10 @@ struct net_device
|
||||
void (*poll_controller)(struct net_device *dev);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_NET_NS
|
||||
/* Network namespace this network device is inside */
|
||||
struct net *nd_net;
|
||||
#endif
|
||||
|
||||
/* bridge stuff */
|
||||
struct net_bridge_port *br_port;
|
||||
@@ -726,6 +728,10 @@ struct net_device
|
||||
/* rtnetlink link ops */
|
||||
const struct rtnl_link_ops *rtnl_link_ops;
|
||||
|
||||
/* for setting kernel sock attribute on TCP connection setup */
|
||||
#define GSO_MAX_SIZE 65536
|
||||
unsigned int gso_max_size;
|
||||
|
||||
/* The TX queue control structures */
|
||||
unsigned int egress_subqueue_count;
|
||||
struct net_device_subqueue egress_subqueue[1];
|
||||
@@ -735,6 +741,28 @@ struct net_device
|
||||
#define NETDEV_ALIGN 32
|
||||
#define NETDEV_ALIGN_CONST (NETDEV_ALIGN - 1)
|
||||
|
||||
/*
|
||||
* Net namespace inlines
|
||||
*/
|
||||
static inline
|
||||
struct net *dev_net(const struct net_device *dev)
|
||||
{
|
||||
#ifdef CONFIG_NET_NS
|
||||
return dev->nd_net;
|
||||
#else
|
||||
return &init_net;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline
|
||||
void dev_net_set(struct net_device *dev, struct net *net)
|
||||
{
|
||||
#ifdef CONFIG_NET_NS
|
||||
release_net(dev->nd_net);
|
||||
dev->nd_net = hold_net(net);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* netdev_priv - access network device private data
|
||||
* @dev: network device
|
||||
@@ -811,7 +839,7 @@ static inline struct net_device *next_net_device(struct net_device *dev)
|
||||
struct list_head *lh;
|
||||
struct net *net;
|
||||
|
||||
net = dev->nd_net;
|
||||
net = dev_net(dev);
|
||||
lh = dev->dev_list.next;
|
||||
return lh == &net->dev_base_head ? NULL : net_device_entry(lh);
|
||||
}
|
||||
@@ -1479,6 +1507,12 @@ static inline int netif_needs_gso(struct net_device *dev, struct sk_buff *skb)
|
||||
unlikely(skb->ip_summed != CHECKSUM_PARTIAL));
|
||||
}
|
||||
|
||||
static inline void netif_set_gso_max_size(struct net_device *dev,
|
||||
unsigned int size)
|
||||
{
|
||||
dev->gso_max_size = size;
|
||||
}
|
||||
|
||||
/* On bonding slaves other than the currently active slave, suppress
|
||||
* duplicates except for 802.3ad ETH_P_SLOW, alb non-mcast/bcast, and
|
||||
* ARP on active-backup slaves with arp_validate enabled.
|
||||
|
||||
@@ -6,11 +6,13 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/skbuff.h>
|
||||
#include <linux/net.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/if.h>
|
||||
#include <linux/in.h>
|
||||
#include <linux/in6.h>
|
||||
#include <linux/wait.h>
|
||||
#include <linux/list.h>
|
||||
#include <net/net_namespace.h>
|
||||
#endif
|
||||
#include <linux/compiler.h>
|
||||
|
||||
@@ -61,13 +63,21 @@ union nf_inet_addr {
|
||||
#ifdef __KERNEL__
|
||||
#ifdef CONFIG_NETFILTER
|
||||
|
||||
static inline int nf_inet_addr_cmp(const union nf_inet_addr *a1,
|
||||
const union nf_inet_addr *a2)
|
||||
{
|
||||
return a1->all[0] == a2->all[0] &&
|
||||
a1->all[1] == a2->all[1] &&
|
||||
a1->all[2] == a2->all[2] &&
|
||||
a1->all[3] == a2->all[3];
|
||||
}
|
||||
|
||||
extern void netfilter_init(void);
|
||||
|
||||
/* Largest hook number + 1 */
|
||||
#define NF_MAX_HOOKS 8
|
||||
|
||||
struct sk_buff;
|
||||
struct net_device;
|
||||
|
||||
typedef unsigned int nf_hookfn(unsigned int hooknum,
|
||||
struct sk_buff *skb,
|
||||
@@ -224,6 +234,11 @@ struct nf_afinfo {
|
||||
unsigned short family;
|
||||
__sum16 (*checksum)(struct sk_buff *skb, unsigned int hook,
|
||||
unsigned int dataoff, u_int8_t protocol);
|
||||
__sum16 (*checksum_partial)(struct sk_buff *skb,
|
||||
unsigned int hook,
|
||||
unsigned int dataoff,
|
||||
unsigned int len,
|
||||
u_int8_t protocol);
|
||||
int (*route)(struct dst_entry **dst, struct flowi *fl);
|
||||
void (*saveroute)(const struct sk_buff *skb,
|
||||
struct nf_queue_entry *entry);
|
||||
@@ -253,6 +268,23 @@ nf_checksum(struct sk_buff *skb, unsigned int hook, unsigned int dataoff,
|
||||
return csum;
|
||||
}
|
||||
|
||||
static inline __sum16
|
||||
nf_checksum_partial(struct sk_buff *skb, unsigned int hook,
|
||||
unsigned int dataoff, unsigned int len,
|
||||
u_int8_t protocol, unsigned short family)
|
||||
{
|
||||
const struct nf_afinfo *afinfo;
|
||||
__sum16 csum = 0;
|
||||
|
||||
rcu_read_lock();
|
||||
afinfo = nf_get_afinfo(family);
|
||||
if (afinfo)
|
||||
csum = afinfo->checksum_partial(skb, hook, dataoff, len,
|
||||
protocol);
|
||||
rcu_read_unlock();
|
||||
return csum;
|
||||
}
|
||||
|
||||
extern int nf_register_afinfo(const struct nf_afinfo *afinfo);
|
||||
extern void nf_unregister_afinfo(const struct nf_afinfo *afinfo);
|
||||
|
||||
@@ -311,5 +343,56 @@ extern void (*nf_ct_destroy)(struct nf_conntrack *);
|
||||
static inline void nf_ct_attach(struct sk_buff *new, struct sk_buff *skb) {}
|
||||
#endif
|
||||
|
||||
static inline struct net *nf_pre_routing_net(const struct net_device *in,
|
||||
const struct net_device *out)
|
||||
{
|
||||
#ifdef CONFIG_NET_NS
|
||||
return in->nd_net;
|
||||
#else
|
||||
return &init_net;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline struct net *nf_local_in_net(const struct net_device *in,
|
||||
const struct net_device *out)
|
||||
{
|
||||
#ifdef CONFIG_NET_NS
|
||||
return in->nd_net;
|
||||
#else
|
||||
return &init_net;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline struct net *nf_forward_net(const struct net_device *in,
|
||||
const struct net_device *out)
|
||||
{
|
||||
#ifdef CONFIG_NET_NS
|
||||
BUG_ON(in->nd_net != out->nd_net);
|
||||
return in->nd_net;
|
||||
#else
|
||||
return &init_net;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline struct net *nf_local_out_net(const struct net_device *in,
|
||||
const struct net_device *out)
|
||||
{
|
||||
#ifdef CONFIG_NET_NS
|
||||
return out->nd_net;
|
||||
#else
|
||||
return &init_net;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline struct net *nf_post_routing_net(const struct net_device *in,
|
||||
const struct net_device *out)
|
||||
{
|
||||
#ifdef CONFIG_NET_NS
|
||||
return out->nd_net;
|
||||
#else
|
||||
return &init_net;
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif /*__KERNEL__*/
|
||||
#endif /*__LINUX_NETFILTER_H*/
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
#ifndef _NF_CONNTRACK_DCCP_H
|
||||
#define _NF_CONNTRACK_DCCP_H
|
||||
|
||||
/* Exposed to userspace over nfnetlink */
|
||||
enum ct_dccp_states {
|
||||
CT_DCCP_NONE,
|
||||
CT_DCCP_REQUEST,
|
||||
CT_DCCP_RESPOND,
|
||||
CT_DCCP_PARTOPEN,
|
||||
CT_DCCP_OPEN,
|
||||
CT_DCCP_CLOSEREQ,
|
||||
CT_DCCP_CLOSING,
|
||||
CT_DCCP_TIMEWAIT,
|
||||
CT_DCCP_IGNORE,
|
||||
CT_DCCP_INVALID,
|
||||
__CT_DCCP_MAX
|
||||
};
|
||||
#define CT_DCCP_MAX (__CT_DCCP_MAX - 1)
|
||||
|
||||
enum ct_dccp_roles {
|
||||
CT_DCCP_ROLE_CLIENT,
|
||||
CT_DCCP_ROLE_SERVER,
|
||||
__CT_DCCP_ROLE_MAX
|
||||
};
|
||||
#define CT_DCCP_ROLE_MAX (__CT_DCCP_ROLE_MAX - 1)
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <net/netfilter/nf_conntrack_tuple.h>
|
||||
|
||||
struct nf_ct_dccp {
|
||||
u_int8_t role[IP_CT_DIR_MAX];
|
||||
u_int8_t state;
|
||||
u_int8_t last_pkt;
|
||||
u_int8_t last_dir;
|
||||
u_int64_t handshake_seq;
|
||||
};
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _NF_CONNTRACK_DCCP_H */
|
||||
@@ -5,37 +5,164 @@
|
||||
#define SIP_PORT 5060
|
||||
#define SIP_TIMEOUT 3600
|
||||
|
||||
enum sip_header_pos {
|
||||
POS_REG_REQ_URI,
|
||||
POS_REQ_URI,
|
||||
POS_FROM,
|
||||
POS_TO,
|
||||
POS_VIA,
|
||||
POS_CONTACT,
|
||||
POS_CONTENT,
|
||||
POS_MEDIA,
|
||||
POS_OWNER_IP4,
|
||||
POS_CONNECTION_IP4,
|
||||
POS_OWNER_IP6,
|
||||
POS_CONNECTION_IP6,
|
||||
POS_SDP_HEADER,
|
||||
struct nf_ct_sip_master {
|
||||
unsigned int register_cseq;
|
||||
};
|
||||
|
||||
enum sip_expectation_classes {
|
||||
SIP_EXPECT_SIGNALLING,
|
||||
SIP_EXPECT_AUDIO,
|
||||
SIP_EXPECT_VIDEO,
|
||||
__SIP_EXPECT_MAX
|
||||
};
|
||||
#define SIP_EXPECT_MAX (__SIP_EXPECT_MAX - 1)
|
||||
|
||||
struct sdp_media_type {
|
||||
const char *name;
|
||||
unsigned int len;
|
||||
enum sip_expectation_classes class;
|
||||
};
|
||||
|
||||
#define SDP_MEDIA_TYPE(__name, __class) \
|
||||
{ \
|
||||
.name = (__name), \
|
||||
.len = sizeof(__name) - 1, \
|
||||
.class = (__class), \
|
||||
}
|
||||
|
||||
struct sip_handler {
|
||||
const char *method;
|
||||
unsigned int len;
|
||||
int (*request)(struct sk_buff *skb,
|
||||
const char **dptr, unsigned int *datalen,
|
||||
unsigned int cseq);
|
||||
int (*response)(struct sk_buff *skb,
|
||||
const char **dptr, unsigned int *datalen,
|
||||
unsigned int cseq, unsigned int code);
|
||||
};
|
||||
|
||||
#define SIP_HANDLER(__method, __request, __response) \
|
||||
{ \
|
||||
.method = (__method), \
|
||||
.len = sizeof(__method) - 1, \
|
||||
.request = (__request), \
|
||||
.response = (__response), \
|
||||
}
|
||||
|
||||
struct sip_header {
|
||||
const char *name;
|
||||
const char *cname;
|
||||
const char *search;
|
||||
unsigned int len;
|
||||
unsigned int clen;
|
||||
unsigned int slen;
|
||||
int (*match_len)(const struct nf_conn *ct,
|
||||
const char *dptr, const char *limit,
|
||||
int *shift);
|
||||
};
|
||||
|
||||
#define __SIP_HDR(__name, __cname, __search, __match) \
|
||||
{ \
|
||||
.name = (__name), \
|
||||
.len = sizeof(__name) - 1, \
|
||||
.cname = (__cname), \
|
||||
.clen = (__cname) ? sizeof(__cname) - 1 : 0, \
|
||||
.search = (__search), \
|
||||
.slen = (__search) ? sizeof(__search) - 1 : 0, \
|
||||
.match_len = (__match), \
|
||||
}
|
||||
|
||||
#define SIP_HDR(__name, __cname, __search, __match) \
|
||||
__SIP_HDR(__name, __cname, __search, __match)
|
||||
|
||||
#define SDP_HDR(__name, __search, __match) \
|
||||
__SIP_HDR(__name, NULL, __search, __match)
|
||||
|
||||
enum sip_header_types {
|
||||
SIP_HDR_CSEQ,
|
||||
SIP_HDR_FROM,
|
||||
SIP_HDR_TO,
|
||||
SIP_HDR_CONTACT,
|
||||
SIP_HDR_VIA,
|
||||
SIP_HDR_EXPIRES,
|
||||
SIP_HDR_CONTENT_LENGTH,
|
||||
};
|
||||
|
||||
enum sdp_header_types {
|
||||
SDP_HDR_UNSPEC,
|
||||
SDP_HDR_VERSION,
|
||||
SDP_HDR_OWNER_IP4,
|
||||
SDP_HDR_CONNECTION_IP4,
|
||||
SDP_HDR_OWNER_IP6,
|
||||
SDP_HDR_CONNECTION_IP6,
|
||||
SDP_HDR_MEDIA,
|
||||
};
|
||||
|
||||
extern unsigned int (*nf_nat_sip_hook)(struct sk_buff *skb,
|
||||
enum ip_conntrack_info ctinfo,
|
||||
struct nf_conn *ct,
|
||||
const char **dptr);
|
||||
extern unsigned int (*nf_nat_sdp_hook)(struct sk_buff *skb,
|
||||
enum ip_conntrack_info ctinfo,
|
||||
struct nf_conntrack_expect *exp,
|
||||
const char *dptr);
|
||||
const char **dptr,
|
||||
unsigned int *datalen);
|
||||
extern unsigned int (*nf_nat_sip_expect_hook)(struct sk_buff *skb,
|
||||
const char **dptr,
|
||||
unsigned int *datalen,
|
||||
struct nf_conntrack_expect *exp,
|
||||
unsigned int matchoff,
|
||||
unsigned int matchlen);
|
||||
extern unsigned int (*nf_nat_sdp_addr_hook)(struct sk_buff *skb,
|
||||
const char **dptr,
|
||||
unsigned int dataoff,
|
||||
unsigned int *datalen,
|
||||
enum sdp_header_types type,
|
||||
enum sdp_header_types term,
|
||||
const union nf_inet_addr *addr);
|
||||
extern unsigned int (*nf_nat_sdp_port_hook)(struct sk_buff *skb,
|
||||
const char **dptr,
|
||||
unsigned int *datalen,
|
||||
unsigned int matchoff,
|
||||
unsigned int matchlen,
|
||||
u_int16_t port);
|
||||
extern unsigned int (*nf_nat_sdp_session_hook)(struct sk_buff *skb,
|
||||
const char **dptr,
|
||||
unsigned int dataoff,
|
||||
unsigned int *datalen,
|
||||
const union nf_inet_addr *addr);
|
||||
extern unsigned int (*nf_nat_sdp_media_hook)(struct sk_buff *skb,
|
||||
const char **dptr,
|
||||
unsigned int *datalen,
|
||||
struct nf_conntrack_expect *rtp_exp,
|
||||
struct nf_conntrack_expect *rtcp_exp,
|
||||
unsigned int mediaoff,
|
||||
unsigned int medialen,
|
||||
union nf_inet_addr *rtp_addr);
|
||||
|
||||
extern int ct_sip_parse_request(const struct nf_conn *ct,
|
||||
const char *dptr, unsigned int datalen,
|
||||
unsigned int *matchoff, unsigned int *matchlen,
|
||||
union nf_inet_addr *addr, __be16 *port);
|
||||
extern int ct_sip_get_header(const struct nf_conn *ct, const char *dptr,
|
||||
unsigned int dataoff, unsigned int datalen,
|
||||
enum sip_header_types type,
|
||||
unsigned int *matchoff, unsigned int *matchlen);
|
||||
extern int ct_sip_parse_header_uri(const struct nf_conn *ct, const char *dptr,
|
||||
unsigned int *dataoff, unsigned int datalen,
|
||||
enum sip_header_types type, int *in_header,
|
||||
unsigned int *matchoff, unsigned int *matchlen,
|
||||
union nf_inet_addr *addr, __be16 *port);
|
||||
extern int ct_sip_parse_address_param(const struct nf_conn *ct, const char *dptr,
|
||||
unsigned int dataoff, unsigned int datalen,
|
||||
const char *name,
|
||||
unsigned int *matchoff, unsigned int *matchlen,
|
||||
union nf_inet_addr *addr);
|
||||
extern int ct_sip_parse_numerical_param(const struct nf_conn *ct, const char *dptr,
|
||||
unsigned int off, unsigned int datalen,
|
||||
const char *name,
|
||||
unsigned int *matchoff, unsigned int *matchen,
|
||||
unsigned int *val);
|
||||
|
||||
extern int ct_sip_get_sdp_header(const struct nf_conn *ct, const char *dptr,
|
||||
unsigned int dataoff, unsigned int datalen,
|
||||
enum sdp_header_types type,
|
||||
enum sdp_header_types term,
|
||||
unsigned int *matchoff, unsigned int *matchlen);
|
||||
|
||||
extern int ct_sip_get_info(const struct nf_conn *ct, const char *dptr,
|
||||
size_t dlen, unsigned int *matchoff,
|
||||
unsigned int *matchlen, enum sip_header_pos pos);
|
||||
extern int ct_sip_lnlen(const char *line, const char *limit);
|
||||
extern const char *ct_sip_search(const char *needle, const char *haystack,
|
||||
size_t needle_len, size_t haystack_len,
|
||||
int case_sensitive);
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* __NF_CONNTRACK_SIP_H__ */
|
||||
|
||||
@@ -80,6 +80,7 @@ enum ctattr_l4proto {
|
||||
enum ctattr_protoinfo {
|
||||
CTA_PROTOINFO_UNSPEC,
|
||||
CTA_PROTOINFO_TCP,
|
||||
CTA_PROTOINFO_DCCP,
|
||||
__CTA_PROTOINFO_MAX
|
||||
};
|
||||
#define CTA_PROTOINFO_MAX (__CTA_PROTOINFO_MAX - 1)
|
||||
@@ -95,6 +96,13 @@ enum ctattr_protoinfo_tcp {
|
||||
};
|
||||
#define CTA_PROTOINFO_TCP_MAX (__CTA_PROTOINFO_TCP_MAX - 1)
|
||||
|
||||
enum ctattr_protoinfo_dccp {
|
||||
CTA_PROTOINFO_DCCP_UNSPEC,
|
||||
CTA_PROTOINFO_DCCP_STATE,
|
||||
__CTA_PROTOINFO_DCCP_MAX,
|
||||
};
|
||||
#define CTA_PROTOINFO_DCCP_MAX (__CTA_PROTOINFO_DCCP_MAX - 1)
|
||||
|
||||
enum ctattr_counters {
|
||||
CTA_COUNTERS_UNSPEC,
|
||||
CTA_COUNTERS_PACKETS, /* old 64bit counters */
|
||||
|
||||
@@ -430,13 +430,13 @@ extern int xt_compat_add_offset(int af, unsigned int offset, short delta);
|
||||
extern void xt_compat_flush_offsets(int af);
|
||||
extern short xt_compat_calc_jump(int af, unsigned int offset);
|
||||
|
||||
extern int xt_compat_match_offset(struct xt_match *match);
|
||||
extern int xt_compat_match_offset(const struct xt_match *match);
|
||||
extern int xt_compat_match_from_user(struct xt_entry_match *m,
|
||||
void **dstptr, unsigned int *size);
|
||||
extern int xt_compat_match_to_user(struct xt_entry_match *m,
|
||||
void __user **dstptr, unsigned int *size);
|
||||
|
||||
extern int xt_compat_target_offset(struct xt_target *target);
|
||||
extern int xt_compat_target_offset(const struct xt_target *target);
|
||||
extern void xt_compat_target_from_user(struct xt_entry_target *t,
|
||||
void **dstptr, unsigned int *size);
|
||||
extern int xt_compat_target_to_user(struct xt_entry_target *t,
|
||||
|
||||
@@ -37,68 +37,54 @@ struct xt_sctp_info {
|
||||
|
||||
#define SCTP_CHUNKMAP_SET(chunkmap, type) \
|
||||
do { \
|
||||
chunkmap[type / bytes(u_int32_t)] |= \
|
||||
(chunkmap)[type / bytes(u_int32_t)] |= \
|
||||
1 << (type % bytes(u_int32_t)); \
|
||||
} while (0)
|
||||
|
||||
#define SCTP_CHUNKMAP_CLEAR(chunkmap, type) \
|
||||
do { \
|
||||
chunkmap[type / bytes(u_int32_t)] &= \
|
||||
(chunkmap)[type / bytes(u_int32_t)] &= \
|
||||
~(1 << (type % bytes(u_int32_t))); \
|
||||
} while (0)
|
||||
|
||||
#define SCTP_CHUNKMAP_IS_SET(chunkmap, type) \
|
||||
({ \
|
||||
(chunkmap[type / bytes (u_int32_t)] & \
|
||||
((chunkmap)[type / bytes (u_int32_t)] & \
|
||||
(1 << (type % bytes (u_int32_t)))) ? 1: 0; \
|
||||
})
|
||||
|
||||
#define SCTP_CHUNKMAP_RESET(chunkmap) \
|
||||
do { \
|
||||
int i; \
|
||||
for (i = 0; i < ARRAY_SIZE(chunkmap); i++) \
|
||||
chunkmap[i] = 0; \
|
||||
} while (0)
|
||||
#define SCTP_CHUNKMAP_RESET(chunkmap) \
|
||||
memset((chunkmap), 0, sizeof(chunkmap))
|
||||
|
||||
#define SCTP_CHUNKMAP_SET_ALL(chunkmap) \
|
||||
do { \
|
||||
int i; \
|
||||
for (i = 0; i < ARRAY_SIZE(chunkmap); i++) \
|
||||
chunkmap[i] = ~0; \
|
||||
} while (0)
|
||||
#define SCTP_CHUNKMAP_SET_ALL(chunkmap) \
|
||||
memset((chunkmap), ~0U, sizeof(chunkmap))
|
||||
|
||||
#define SCTP_CHUNKMAP_COPY(destmap, srcmap) \
|
||||
do { \
|
||||
int i; \
|
||||
for (i = 0; i < ARRAY_SIZE(srcmap); i++) \
|
||||
destmap[i] = srcmap[i]; \
|
||||
} while (0)
|
||||
#define SCTP_CHUNKMAP_COPY(destmap, srcmap) \
|
||||
memcpy((destmap), (srcmap), sizeof(srcmap))
|
||||
|
||||
#define SCTP_CHUNKMAP_IS_CLEAR(chunkmap) \
|
||||
({ \
|
||||
int i; \
|
||||
int flag = 1; \
|
||||
for (i = 0; i < ARRAY_SIZE(chunkmap); i++) { \
|
||||
if (chunkmap[i]) { \
|
||||
flag = 0; \
|
||||
break; \
|
||||
} \
|
||||
} \
|
||||
flag; \
|
||||
})
|
||||
#define SCTP_CHUNKMAP_IS_CLEAR(chunkmap) \
|
||||
__sctp_chunkmap_is_clear((chunkmap), ARRAY_SIZE(chunkmap))
|
||||
static inline bool
|
||||
__sctp_chunkmap_is_clear(const u_int32_t *chunkmap, unsigned int n)
|
||||
{
|
||||
unsigned int i;
|
||||
for (i = 0; i < n; ++i)
|
||||
if (chunkmap[i])
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
#define SCTP_CHUNKMAP_IS_ALL_SET(chunkmap) \
|
||||
({ \
|
||||
int i; \
|
||||
int flag = 1; \
|
||||
for (i = 0; i < ARRAY_SIZE(chunkmap); i++) { \
|
||||
if (chunkmap[i] != ~0) { \
|
||||
flag = 0; \
|
||||
break; \
|
||||
} \
|
||||
} \
|
||||
flag; \
|
||||
})
|
||||
#define SCTP_CHUNKMAP_IS_ALL_SET(chunkmap) \
|
||||
__sctp_chunkmap_is_all_set((chunkmap), ARRAY_SIZE(chunkmap))
|
||||
static inline bool
|
||||
__sctp_chunkmap_is_all_set(const u_int32_t *chunkmap, unsigned int n)
|
||||
{
|
||||
unsigned int i;
|
||||
for (i = 0; i < n; ++i)
|
||||
if (chunkmap[i] != ~0U)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif /* _XT_SCTP_H_ */
|
||||
|
||||
|
||||
@@ -23,8 +23,6 @@
|
||||
|
||||
#define ARPT_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN
|
||||
#define ARPT_TABLE_MAXNAMELEN XT_TABLE_MAXNAMELEN
|
||||
#define arpt_target xt_target
|
||||
#define arpt_table xt_table
|
||||
|
||||
#define ARPT_DEV_ADDR_LEN_MAX 16
|
||||
|
||||
@@ -266,20 +264,15 @@ struct arpt_error
|
||||
.target.errorname = "ERROR", \
|
||||
}
|
||||
|
||||
#define arpt_register_target(tgt) \
|
||||
({ (tgt)->family = NF_ARP; \
|
||||
xt_register_target(tgt); })
|
||||
#define arpt_unregister_target(tgt) xt_unregister_target(tgt)
|
||||
|
||||
extern struct arpt_table *arpt_register_table(struct net *net,
|
||||
struct arpt_table *table,
|
||||
const struct arpt_replace *repl);
|
||||
extern void arpt_unregister_table(struct arpt_table *table);
|
||||
extern struct xt_table *arpt_register_table(struct net *net,
|
||||
struct xt_table *table,
|
||||
const struct arpt_replace *repl);
|
||||
extern void arpt_unregister_table(struct xt_table *table);
|
||||
extern unsigned int arpt_do_table(struct sk_buff *skb,
|
||||
unsigned int hook,
|
||||
const struct net_device *in,
|
||||
const struct net_device *out,
|
||||
struct arpt_table *table);
|
||||
struct xt_table *table);
|
||||
|
||||
#define ARPT_ALIGN(s) XT_ALIGN(s)
|
||||
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
#ifndef __LINUX_BRIDGE_EBT_NFLOG_H
|
||||
#define __LINUX_BRIDGE_EBT_NFLOG_H
|
||||
|
||||
#define EBT_NFLOG_MASK 0x0
|
||||
|
||||
#define EBT_NFLOG_PREFIX_SIZE 64
|
||||
#define EBT_NFLOG_WATCHER "nflog"
|
||||
|
||||
#define EBT_NFLOG_DEFAULT_GROUP 0x1
|
||||
#define EBT_NFLOG_DEFAULT_THRESHOLD 1
|
||||
|
||||
struct ebt_nflog_info {
|
||||
u_int32_t len;
|
||||
u_int16_t group;
|
||||
u_int16_t threshold;
|
||||
u_int16_t flags;
|
||||
u_int16_t pad;
|
||||
char prefix[EBT_NFLOG_PREFIX_SIZE];
|
||||
};
|
||||
|
||||
#endif /* __LINUX_BRIDGE_EBT_NFLOG_H */
|
||||
@@ -62,8 +62,6 @@ enum nf_ip_hook_priorities {
|
||||
NF_IP_PRI_FILTER = 0,
|
||||
NF_IP_PRI_NAT_SRC = 100,
|
||||
NF_IP_PRI_SELINUX_LAST = 225,
|
||||
NF_IP_PRI_CONNTRACK_HELPER = INT_MAX - 2,
|
||||
NF_IP_PRI_NAT_SEQ_ADJUST = INT_MAX - 1,
|
||||
NF_IP_PRI_CONNTRACK_CONFIRM = INT_MAX,
|
||||
NF_IP_PRI_LAST = INT_MAX,
|
||||
};
|
||||
|
||||
+200
-18
@@ -78,6 +78,18 @@
|
||||
* or, if no MAC address given, all stations, on the interface identified
|
||||
* by %NL80211_ATTR_IFINDEX.
|
||||
*
|
||||
* @NL80211_CMD_GET_MPATH: Get mesh path attributes for mesh path to
|
||||
* destination %NL80211_ATTR_MAC on the interface identified by
|
||||
* %NL80211_ATTR_IFINDEX.
|
||||
* @NL80211_CMD_SET_MPATH: Set mesh path attributes for mesh path to
|
||||
* destination %NL80211_ATTR_MAC on the interface identified by
|
||||
* %NL80211_ATTR_IFINDEX.
|
||||
* @NL80211_CMD_NEW_PATH: Add a mesh path with given attributes to the
|
||||
* the interface identified by %NL80211_ATTR_IFINDEX.
|
||||
* @NL80211_CMD_DEL_PATH: Remove a mesh path identified by %NL80211_ATTR_MAC
|
||||
* or, if no MAC address given, all mesh paths, on the interface identified
|
||||
* by %NL80211_ATTR_IFINDEX.
|
||||
*
|
||||
* @NL80211_CMD_MAX: highest used command number
|
||||
* @__NL80211_CMD_AFTER_LAST: internal use
|
||||
*/
|
||||
@@ -112,6 +124,11 @@ enum nl80211_commands {
|
||||
|
||||
/* add commands here */
|
||||
|
||||
NL80211_CMD_GET_MPATH,
|
||||
NL80211_CMD_SET_MPATH,
|
||||
NL80211_CMD_NEW_MPATH,
|
||||
NL80211_CMD_DEL_MPATH,
|
||||
|
||||
/* used to define NL80211_CMD_MAX below */
|
||||
__NL80211_CMD_AFTER_LAST,
|
||||
NL80211_CMD_MAX = __NL80211_CMD_AFTER_LAST - 1
|
||||
@@ -157,9 +174,23 @@ enum nl80211_commands {
|
||||
* restriction (at most %NL80211_MAX_SUPP_RATES).
|
||||
* @NL80211_ATTR_STA_VLAN: interface index of VLAN interface to move station
|
||||
* to, or the AP interface the station was originally added to to.
|
||||
* @NL80211_ATTR_STA_STATS: statistics for a station, part of station info
|
||||
* @NL80211_ATTR_STA_INFO: information about a station, part of station info
|
||||
* given for %NL80211_CMD_GET_STATION, nested attribute containing
|
||||
* info as possible, see &enum nl80211_sta_stats.
|
||||
* info as possible, see &enum nl80211_sta_info.
|
||||
*
|
||||
* @NL80211_ATTR_WIPHY_BANDS: Information about an operating bands,
|
||||
* consisting of a nested array.
|
||||
*
|
||||
* @NL80211_ATTR_MESH_ID: mesh id (1-32 bytes).
|
||||
* @NL80211_ATTR_PLINK_ACTION: action to perform on the mesh peer link.
|
||||
* @NL80211_ATTR_MPATH_NEXT_HOP: MAC address of the next hop for a mesh path.
|
||||
* @NL80211_ATTR_MPATH_INFO: information about a mesh_path, part of mesh path
|
||||
* info given for %NL80211_CMD_GET_MPATH, nested attribute described at
|
||||
* &enum nl80211_mpath_info.
|
||||
*
|
||||
*
|
||||
* @NL80211_ATTR_MNTR_FLAGS: flags, nested element with NLA_FLAG attributes of
|
||||
* &enum nl80211_mntr_flags.
|
||||
*
|
||||
* @NL80211_ATTR_MAX: highest attribute number currently defined
|
||||
* @__NL80211_ATTR_AFTER_LAST: internal use
|
||||
@@ -193,10 +224,19 @@ enum nl80211_attrs {
|
||||
NL80211_ATTR_STA_LISTEN_INTERVAL,
|
||||
NL80211_ATTR_STA_SUPPORTED_RATES,
|
||||
NL80211_ATTR_STA_VLAN,
|
||||
NL80211_ATTR_STA_STATS,
|
||||
NL80211_ATTR_STA_INFO,
|
||||
|
||||
NL80211_ATTR_WIPHY_BANDS,
|
||||
|
||||
NL80211_ATTR_MNTR_FLAGS,
|
||||
|
||||
/* add attributes here, update the policy in nl80211.c */
|
||||
|
||||
NL80211_ATTR_MESH_ID,
|
||||
NL80211_ATTR_STA_PLINK_ACTION,
|
||||
NL80211_ATTR_MPATH_NEXT_HOP,
|
||||
NL80211_ATTR_MPATH_INFO,
|
||||
|
||||
__NL80211_ATTR_AFTER_LAST,
|
||||
NL80211_ATTR_MAX = __NL80211_ATTR_AFTER_LAST - 1
|
||||
};
|
||||
@@ -213,6 +253,7 @@ enum nl80211_attrs {
|
||||
* @NL80211_IFTYPE_AP_VLAN: VLAN interface for access points
|
||||
* @NL80211_IFTYPE_WDS: wireless distribution interface
|
||||
* @NL80211_IFTYPE_MONITOR: monitor interface receiving all frames
|
||||
* @NL80211_IFTYPE_MESH_POINT: mesh point
|
||||
* @NL80211_IFTYPE_MAX: highest interface type number currently defined
|
||||
* @__NL80211_IFTYPE_AFTER_LAST: internal use
|
||||
*
|
||||
@@ -228,6 +269,7 @@ enum nl80211_iftype {
|
||||
NL80211_IFTYPE_AP_VLAN,
|
||||
NL80211_IFTYPE_WDS,
|
||||
NL80211_IFTYPE_MONITOR,
|
||||
NL80211_IFTYPE_MESH_POINT,
|
||||
|
||||
/* keep last */
|
||||
__NL80211_IFTYPE_AFTER_LAST,
|
||||
@@ -257,27 +299,167 @@ enum nl80211_sta_flags {
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nl80211_sta_stats - station statistics
|
||||
* enum nl80211_sta_info - station information
|
||||
*
|
||||
* These attribute types are used with %NL80211_ATTR_STA_STATS
|
||||
* These attribute types are used with %NL80211_ATTR_STA_INFO
|
||||
* when getting information about a station.
|
||||
*
|
||||
* @__NL80211_STA_STAT_INVALID: attribute number 0 is reserved
|
||||
* @NL80211_STA_STAT_INACTIVE_TIME: time since last activity (u32, msecs)
|
||||
* @NL80211_STA_STAT_RX_BYTES: total received bytes (u32, from this station)
|
||||
* @NL80211_STA_STAT_TX_BYTES: total transmitted bytes (u32, to this station)
|
||||
* @__NL80211_STA_STAT_AFTER_LAST: internal
|
||||
* @NL80211_STA_STAT_MAX: highest possible station stats attribute
|
||||
* @__NL80211_STA_INFO_INVALID: attribute number 0 is reserved
|
||||
* @NL80211_STA_INFO_INACTIVE_TIME: time since last activity (u32, msecs)
|
||||
* @NL80211_STA_INFO_RX_BYTES: total received bytes (u32, from this station)
|
||||
* @NL80211_STA_INFO_TX_BYTES: total transmitted bytes (u32, to this station)
|
||||
* @__NL80211_STA_INFO_AFTER_LAST: internal
|
||||
* @NL80211_STA_INFO_MAX: highest possible station info attribute
|
||||
*/
|
||||
enum nl80211_sta_stats {
|
||||
__NL80211_STA_STAT_INVALID,
|
||||
NL80211_STA_STAT_INACTIVE_TIME,
|
||||
NL80211_STA_STAT_RX_BYTES,
|
||||
NL80211_STA_STAT_TX_BYTES,
|
||||
enum nl80211_sta_info {
|
||||
__NL80211_STA_INFO_INVALID,
|
||||
NL80211_STA_INFO_INACTIVE_TIME,
|
||||
NL80211_STA_INFO_RX_BYTES,
|
||||
NL80211_STA_INFO_TX_BYTES,
|
||||
NL80211_STA_INFO_LLID,
|
||||
NL80211_STA_INFO_PLID,
|
||||
NL80211_STA_INFO_PLINK_STATE,
|
||||
|
||||
/* keep last */
|
||||
__NL80211_STA_STAT_AFTER_LAST,
|
||||
NL80211_STA_STAT_MAX = __NL80211_STA_STAT_AFTER_LAST - 1
|
||||
__NL80211_STA_INFO_AFTER_LAST,
|
||||
NL80211_STA_INFO_MAX = __NL80211_STA_INFO_AFTER_LAST - 1
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nl80211_mpath_flags - nl80211 mesh path flags
|
||||
*
|
||||
* @NL80211_MPATH_FLAG_ACTIVE: the mesh path is active
|
||||
* @NL80211_MPATH_FLAG_RESOLVING: the mesh path discovery process is running
|
||||
* @NL80211_MPATH_FLAG_DSN_VALID: the mesh path contains a valid DSN
|
||||
* @NL80211_MPATH_FLAG_FIXED: the mesh path has been manually set
|
||||
* @NL80211_MPATH_FLAG_RESOLVED: the mesh path discovery process succeeded
|
||||
*/
|
||||
enum nl80211_mpath_flags {
|
||||
NL80211_MPATH_FLAG_ACTIVE = 1<<0,
|
||||
NL80211_MPATH_FLAG_RESOLVING = 1<<1,
|
||||
NL80211_MPATH_FLAG_DSN_VALID = 1<<2,
|
||||
NL80211_MPATH_FLAG_FIXED = 1<<3,
|
||||
NL80211_MPATH_FLAG_RESOLVED = 1<<4,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nl80211_mpath_info - mesh path information
|
||||
*
|
||||
* These attribute types are used with %NL80211_ATTR_MPATH_INFO when getting
|
||||
* information about a mesh path.
|
||||
*
|
||||
* @__NL80211_MPATH_INFO_INVALID: attribute number 0 is reserved
|
||||
* @NL80211_ATTR_MPATH_FRAME_QLEN: number of queued frames for this destination
|
||||
* @NL80211_ATTR_MPATH_DSN: destination sequence number
|
||||
* @NL80211_ATTR_MPATH_METRIC: metric (cost) of this mesh path
|
||||
* @NL80211_ATTR_MPATH_EXPTIME: expiration time for the path, in msec from now
|
||||
* @NL80211_ATTR_MPATH_FLAGS: mesh path flags, enumerated in
|
||||
* &enum nl80211_mpath_flags;
|
||||
* @NL80211_ATTR_MPATH_DISCOVERY_TIMEOUT: total path discovery timeout, in msec
|
||||
* @NL80211_ATTR_MPATH_DISCOVERY_RETRIES: mesh path discovery retries
|
||||
*/
|
||||
enum nl80211_mpath_info {
|
||||
__NL80211_MPATH_INFO_INVALID,
|
||||
NL80211_MPATH_INFO_FRAME_QLEN,
|
||||
NL80211_MPATH_INFO_DSN,
|
||||
NL80211_MPATH_INFO_METRIC,
|
||||
NL80211_MPATH_INFO_EXPTIME,
|
||||
NL80211_MPATH_INFO_FLAGS,
|
||||
NL80211_MPATH_INFO_DISCOVERY_TIMEOUT,
|
||||
NL80211_MPATH_INFO_DISCOVERY_RETRIES,
|
||||
|
||||
/* keep last */
|
||||
__NL80211_MPATH_INFO_AFTER_LAST,
|
||||
NL80211_MPATH_INFO_MAX = __NL80211_MPATH_INFO_AFTER_LAST - 1
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nl80211_band_attr - band attributes
|
||||
* @__NL80211_BAND_ATTR_INVALID: attribute number 0 is reserved
|
||||
* @NL80211_BAND_ATTR_FREQS: supported frequencies in this band,
|
||||
* an array of nested frequency attributes
|
||||
* @NL80211_BAND_ATTR_RATES: supported bitrates in this band,
|
||||
* an array of nested bitrate attributes
|
||||
*/
|
||||
enum nl80211_band_attr {
|
||||
__NL80211_BAND_ATTR_INVALID,
|
||||
NL80211_BAND_ATTR_FREQS,
|
||||
NL80211_BAND_ATTR_RATES,
|
||||
|
||||
/* keep last */
|
||||
__NL80211_BAND_ATTR_AFTER_LAST,
|
||||
NL80211_BAND_ATTR_MAX = __NL80211_BAND_ATTR_AFTER_LAST - 1
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nl80211_frequency_attr - frequency attributes
|
||||
* @NL80211_FREQUENCY_ATTR_FREQ: Frequency in MHz
|
||||
* @NL80211_FREQUENCY_ATTR_DISABLED: Channel is disabled in current
|
||||
* regulatory domain.
|
||||
* @NL80211_FREQUENCY_ATTR_PASSIVE_SCAN: Only passive scanning is
|
||||
* permitted on this channel in current regulatory domain.
|
||||
* @NL80211_FREQUENCY_ATTR_NO_IBSS: IBSS networks are not permitted
|
||||
* on this channel in current regulatory domain.
|
||||
* @NL80211_FREQUENCY_ATTR_RADAR: Radar detection is mandatory
|
||||
* on this channel in current regulatory domain.
|
||||
*/
|
||||
enum nl80211_frequency_attr {
|
||||
__NL80211_FREQUENCY_ATTR_INVALID,
|
||||
NL80211_FREQUENCY_ATTR_FREQ,
|
||||
NL80211_FREQUENCY_ATTR_DISABLED,
|
||||
NL80211_FREQUENCY_ATTR_PASSIVE_SCAN,
|
||||
NL80211_FREQUENCY_ATTR_NO_IBSS,
|
||||
NL80211_FREQUENCY_ATTR_RADAR,
|
||||
|
||||
/* keep last */
|
||||
__NL80211_FREQUENCY_ATTR_AFTER_LAST,
|
||||
NL80211_FREQUENCY_ATTR_MAX = __NL80211_FREQUENCY_ATTR_AFTER_LAST - 1
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nl80211_bitrate_attr - bitrate attributes
|
||||
* @NL80211_BITRATE_ATTR_RATE: Bitrate in units of 100 kbps
|
||||
* @NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE: Short preamble supported
|
||||
* in 2.4 GHz band.
|
||||
*/
|
||||
enum nl80211_bitrate_attr {
|
||||
__NL80211_BITRATE_ATTR_INVALID,
|
||||
NL80211_BITRATE_ATTR_RATE,
|
||||
NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE,
|
||||
|
||||
/* keep last */
|
||||
__NL80211_BITRATE_ATTR_AFTER_LAST,
|
||||
NL80211_BITRATE_ATTR_MAX = __NL80211_BITRATE_ATTR_AFTER_LAST - 1
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nl80211_mntr_flags - monitor configuration flags
|
||||
*
|
||||
* Monitor configuration flags.
|
||||
*
|
||||
* @__NL80211_MNTR_FLAG_INVALID: reserved
|
||||
*
|
||||
* @NL80211_MNTR_FLAG_FCSFAIL: pass frames with bad FCS
|
||||
* @NL80211_MNTR_FLAG_PLCPFAIL: pass frames with bad PLCP
|
||||
* @NL80211_MNTR_FLAG_CONTROL: pass control frames
|
||||
* @NL80211_MNTR_FLAG_OTHER_BSS: disable BSSID filtering
|
||||
* @NL80211_MNTR_FLAG_COOK_FRAMES: report frames after processing.
|
||||
* overrides all other flags.
|
||||
*
|
||||
* @__NL80211_MNTR_FLAG_AFTER_LAST: internal use
|
||||
* @NL80211_MNTR_FLAG_MAX: highest possible monitor flag
|
||||
*/
|
||||
enum nl80211_mntr_flags {
|
||||
__NL80211_MNTR_FLAG_INVALID,
|
||||
NL80211_MNTR_FLAG_FCSFAIL,
|
||||
NL80211_MNTR_FLAG_PLCPFAIL,
|
||||
NL80211_MNTR_FLAG_CONTROL,
|
||||
NL80211_MNTR_FLAG_OTHER_BSS,
|
||||
NL80211_MNTR_FLAG_COOK_FRAMES,
|
||||
|
||||
/* keep last */
|
||||
__NL80211_MNTR_FLAG_AFTER_LAST,
|
||||
NL80211_MNTR_FLAG_MAX = __NL80211_MNTR_FLAG_AFTER_LAST - 1
|
||||
};
|
||||
|
||||
#endif /* __LINUX_NL80211_H */
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
#ifndef __LINUX_PCOUNTER_H
|
||||
#define __LINUX_PCOUNTER_H
|
||||
/*
|
||||
* Using a dynamic percpu 'int' variable has a cost :
|
||||
* 1) Extra dereference
|
||||
* Current per_cpu_ptr() implementation uses an array per 'percpu variable'.
|
||||
* 2) memory cost of NR_CPUS*(32+sizeof(void *)) instead of num_possible_cpus()*4
|
||||
*
|
||||
* This pcounter implementation is an abstraction to be able to use
|
||||
* either a static or a dynamic per cpu variable.
|
||||
* One dynamic per cpu variable gets a fast & cheap implementation, we can
|
||||
* change pcounter implementation too.
|
||||
*/
|
||||
struct pcounter {
|
||||
#ifdef CONFIG_SMP
|
||||
void (*add)(struct pcounter *self, int inc);
|
||||
int (*getval)(const struct pcounter *self, int cpu);
|
||||
int *per_cpu_values;
|
||||
#else
|
||||
int val;
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
#include <linux/percpu.h>
|
||||
|
||||
#define DEFINE_PCOUNTER(NAME) \
|
||||
static DEFINE_PER_CPU(int, NAME##_pcounter_values); \
|
||||
static void NAME##_pcounter_add(struct pcounter *self, int val) \
|
||||
{ \
|
||||
__get_cpu_var(NAME##_pcounter_values) += val; \
|
||||
} \
|
||||
static int NAME##_pcounter_getval(const struct pcounter *self, int cpu) \
|
||||
{ \
|
||||
return per_cpu(NAME##_pcounter_values, cpu); \
|
||||
} \
|
||||
|
||||
#define PCOUNTER_MEMBER_INITIALIZER(NAME, MEMBER) \
|
||||
MEMBER = { \
|
||||
.add = NAME##_pcounter_add, \
|
||||
.getval = NAME##_pcounter_getval, \
|
||||
}
|
||||
|
||||
|
||||
static inline void pcounter_add(struct pcounter *self, int inc)
|
||||
{
|
||||
self->add(self, inc);
|
||||
}
|
||||
|
||||
extern int pcounter_getval(const struct pcounter *self);
|
||||
extern int pcounter_alloc(struct pcounter *self);
|
||||
extern void pcounter_free(struct pcounter *self);
|
||||
|
||||
|
||||
#else /* CONFIG_SMP */
|
||||
|
||||
static inline void pcounter_add(struct pcounter *self, int inc)
|
||||
{
|
||||
self->val += inc;
|
||||
}
|
||||
|
||||
static inline int pcounter_getval(const struct pcounter *self)
|
||||
{
|
||||
return self->val;
|
||||
}
|
||||
|
||||
#define DEFINE_PCOUNTER(NAME)
|
||||
#define PCOUNTER_MEMBER_INITIALIZER(NAME, MEMBER)
|
||||
#define pcounter_alloc(self) 0
|
||||
#define pcounter_free(self)
|
||||
|
||||
#endif /* CONFIG_SMP */
|
||||
|
||||
#endif /* __LINUX_PCOUNTER_H */
|
||||
+41
-20
@@ -39,7 +39,8 @@
|
||||
SUPPORTED_1000baseT_Half | \
|
||||
SUPPORTED_1000baseT_Full)
|
||||
|
||||
/* Set phydev->irq to PHY_POLL if interrupts are not supported,
|
||||
/*
|
||||
* Set phydev->irq to PHY_POLL if interrupts are not supported,
|
||||
* or not desired for this PHY. Set to PHY_IGNORE_INTERRUPT if
|
||||
* the attached driver handles the interrupt
|
||||
*/
|
||||
@@ -63,8 +64,6 @@ typedef enum {
|
||||
PHY_INTERFACE_MODE_RTBI
|
||||
} phy_interface_t;
|
||||
|
||||
#define MII_BUS_MAX 4
|
||||
|
||||
|
||||
#define PHY_INIT_TIMEOUT 100000
|
||||
#define PHY_STATE_TIME 1
|
||||
@@ -74,20 +73,30 @@ typedef enum {
|
||||
#define PHY_MAX_ADDR 32
|
||||
|
||||
/* Used when trying to connect to a specific phy (mii bus id:phy device id) */
|
||||
#define PHY_ID_FMT "%x:%02x"
|
||||
#define PHY_ID_FMT "%s:%02x"
|
||||
|
||||
/* The Bus class for PHYs. Devices which provide access to
|
||||
* PHYs should register using this structure */
|
||||
/*
|
||||
* Need to be a little smaller than phydev->dev.bus_id to leave room
|
||||
* for the ":%02x"
|
||||
*/
|
||||
#define MII_BUS_ID_SIZE (BUS_ID_SIZE - 3)
|
||||
|
||||
/*
|
||||
* The Bus class for PHYs. Devices which provide access to
|
||||
* PHYs should register using this structure
|
||||
*/
|
||||
struct mii_bus {
|
||||
const char *name;
|
||||
int id;
|
||||
char id[MII_BUS_ID_SIZE];
|
||||
void *priv;
|
||||
int (*read)(struct mii_bus *bus, int phy_id, int regnum);
|
||||
int (*write)(struct mii_bus *bus, int phy_id, int regnum, u16 val);
|
||||
int (*reset)(struct mii_bus *bus);
|
||||
|
||||
/* A lock to ensure that only one thing can read/write
|
||||
* the MDIO bus at a time */
|
||||
/*
|
||||
* A lock to ensure that only one thing can read/write
|
||||
* the MDIO bus at a time
|
||||
*/
|
||||
struct mutex mdio_lock;
|
||||
|
||||
struct device *dev;
|
||||
@@ -98,8 +107,10 @@ struct mii_bus {
|
||||
/* Phy addresses to be ignored when probing */
|
||||
u32 phy_mask;
|
||||
|
||||
/* Pointer to an array of interrupts, each PHY's
|
||||
* interrupt at the index matching its address */
|
||||
/*
|
||||
* Pointer to an array of interrupts, each PHY's
|
||||
* interrupt at the index matching its address
|
||||
*/
|
||||
int *irq;
|
||||
};
|
||||
|
||||
@@ -251,7 +262,8 @@ struct phy_device {
|
||||
/* Bus address of the PHY (0-32) */
|
||||
int addr;
|
||||
|
||||
/* forced speed & duplex (no autoneg)
|
||||
/*
|
||||
* forced speed & duplex (no autoneg)
|
||||
* partner speed & duplex & pause (autoneg)
|
||||
*/
|
||||
int speed;
|
||||
@@ -274,8 +286,10 @@ struct phy_device {
|
||||
|
||||
int link_timeout;
|
||||
|
||||
/* Interrupt number for this PHY
|
||||
* -1 means no interrupt */
|
||||
/*
|
||||
* Interrupt number for this PHY
|
||||
* -1 means no interrupt
|
||||
*/
|
||||
int irq;
|
||||
|
||||
/* private data pointer */
|
||||
@@ -325,22 +339,28 @@ struct phy_driver {
|
||||
u32 features;
|
||||
u32 flags;
|
||||
|
||||
/* Called to initialize the PHY,
|
||||
* including after a reset */
|
||||
/*
|
||||
* Called to initialize the PHY,
|
||||
* including after a reset
|
||||
*/
|
||||
int (*config_init)(struct phy_device *phydev);
|
||||
|
||||
/* Called during discovery. Used to set
|
||||
* up device-specific structures, if any */
|
||||
/*
|
||||
* Called during discovery. Used to set
|
||||
* up device-specific structures, if any
|
||||
*/
|
||||
int (*probe)(struct phy_device *phydev);
|
||||
|
||||
/* PHY Power Management */
|
||||
int (*suspend)(struct phy_device *phydev);
|
||||
int (*resume)(struct phy_device *phydev);
|
||||
|
||||
/* Configures the advertisement and resets
|
||||
/*
|
||||
* Configures the advertisement and resets
|
||||
* autonegotiation if phydev->autoneg is on,
|
||||
* forces the speed to the current settings in phydev
|
||||
* if phydev->autoneg is off */
|
||||
* if phydev->autoneg is off
|
||||
*/
|
||||
int (*config_aneg)(struct phy_device *phydev);
|
||||
|
||||
/* Determines the negotiated speed and duplex */
|
||||
@@ -361,6 +381,7 @@ struct phy_driver {
|
||||
|
||||
int phy_read(struct phy_device *phydev, u16 regnum);
|
||||
int phy_write(struct phy_device *phydev, u16 regnum, u16 val);
|
||||
int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id);
|
||||
struct phy_device* get_phy_device(struct mii_bus *bus, int addr);
|
||||
int phy_clear_interrupt(struct phy_device *phydev);
|
||||
int phy_config_interrupt(struct phy_device *phydev, u32 interrupts);
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
#ifndef __LINUX_PIM_H
|
||||
#define __LINUX_PIM_H
|
||||
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
#ifndef __KERNEL__
|
||||
struct pim {
|
||||
#if defined(__LITTLE_ENDIAN_BITFIELD)
|
||||
__u8 pim_type:4, /* PIM message type */
|
||||
pim_ver:4; /* PIM version */
|
||||
#elif defined(__BIG_ENDIAN_BITFIELD)
|
||||
__u8 pim_ver:4; /* PIM version */
|
||||
pim_type:4; /* PIM message type */
|
||||
#endif
|
||||
__u8 pim_rsv; /* Reserved */
|
||||
__be16 pim_cksum; /* Checksum */
|
||||
};
|
||||
|
||||
#define PIM_MINLEN 8
|
||||
#endif
|
||||
|
||||
/* Message types - V1 */
|
||||
#define PIM_V1_VERSION __constant_htonl(0x10000000)
|
||||
#define PIM_V1_REGISTER 1
|
||||
|
||||
/* Message types - V2 */
|
||||
#define PIM_VERSION 2
|
||||
#define PIM_REGISTER 1
|
||||
|
||||
#if defined(__KERNEL__)
|
||||
#define PIM_NULL_REGISTER __constant_htonl(0x40000000)
|
||||
|
||||
/* PIMv2 register message header layout (ietf-draft-idmr-pimvsm-v2-00.ps */
|
||||
struct pimreghdr
|
||||
{
|
||||
__u8 type;
|
||||
__u8 reserved;
|
||||
__be16 csum;
|
||||
__be32 flags;
|
||||
};
|
||||
|
||||
struct sk_buff;
|
||||
extern int pim_rcv_v1(struct sk_buff *);
|
||||
#endif
|
||||
#endif
|
||||
+24
-24
@@ -910,24 +910,24 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
|
||||
* Security hooks for XFRM operations.
|
||||
*
|
||||
* @xfrm_policy_alloc_security:
|
||||
* @xp contains the xfrm_policy being added to Security Policy Database
|
||||
* used by the XFRM system.
|
||||
* @ctxp is a pointer to the xfrm_sec_ctx being added to Security Policy
|
||||
* Database used by the XFRM system.
|
||||
* @sec_ctx contains the security context information being provided by
|
||||
* the user-level policy update program (e.g., setkey).
|
||||
* Allocate a security structure to the xp->security field; the security
|
||||
* field is initialized to NULL when the xfrm_policy is allocated.
|
||||
* Return 0 if operation was successful (memory to allocate, legal context)
|
||||
* @xfrm_policy_clone_security:
|
||||
* @old contains an existing xfrm_policy in the SPD.
|
||||
* @new contains a new xfrm_policy being cloned from old.
|
||||
* Allocate a security structure to the new->security field
|
||||
* that contains the information from the old->security field.
|
||||
* @old_ctx contains an existing xfrm_sec_ctx.
|
||||
* @new_ctxp contains a new xfrm_sec_ctx being cloned from old.
|
||||
* Allocate a security structure in new_ctxp that contains the
|
||||
* information from the old_ctx structure.
|
||||
* Return 0 if operation was successful (memory to allocate).
|
||||
* @xfrm_policy_free_security:
|
||||
* @xp contains the xfrm_policy
|
||||
* @ctx contains the xfrm_sec_ctx
|
||||
* Deallocate xp->security.
|
||||
* @xfrm_policy_delete_security:
|
||||
* @xp contains the xfrm_policy.
|
||||
* @ctx contains the xfrm_sec_ctx.
|
||||
* Authorize deletion of xp->security.
|
||||
* @xfrm_state_alloc_security:
|
||||
* @x contains the xfrm_state being added to the Security Association
|
||||
@@ -947,7 +947,7 @@ static inline void security_free_mnt_opts(struct security_mnt_opts *opts)
|
||||
* @x contains the xfrm_state.
|
||||
* Authorize deletion of x->security.
|
||||
* @xfrm_policy_lookup:
|
||||
* @xp contains the xfrm_policy for which the access control is being
|
||||
* @ctx contains the xfrm_sec_ctx for which the access control is being
|
||||
* checked.
|
||||
* @fl_secid contains the flow security label that is used to authorize
|
||||
* access to the policy xp.
|
||||
@@ -1454,17 +1454,17 @@ struct security_operations {
|
||||
#endif /* CONFIG_SECURITY_NETWORK */
|
||||
|
||||
#ifdef CONFIG_SECURITY_NETWORK_XFRM
|
||||
int (*xfrm_policy_alloc_security) (struct xfrm_policy *xp,
|
||||
int (*xfrm_policy_alloc_security) (struct xfrm_sec_ctx **ctxp,
|
||||
struct xfrm_user_sec_ctx *sec_ctx);
|
||||
int (*xfrm_policy_clone_security) (struct xfrm_policy *old, struct xfrm_policy *new);
|
||||
void (*xfrm_policy_free_security) (struct xfrm_policy *xp);
|
||||
int (*xfrm_policy_delete_security) (struct xfrm_policy *xp);
|
||||
int (*xfrm_policy_clone_security) (struct xfrm_sec_ctx *old_ctx, struct xfrm_sec_ctx **new_ctx);
|
||||
void (*xfrm_policy_free_security) (struct xfrm_sec_ctx *ctx);
|
||||
int (*xfrm_policy_delete_security) (struct xfrm_sec_ctx *ctx);
|
||||
int (*xfrm_state_alloc_security) (struct xfrm_state *x,
|
||||
struct xfrm_user_sec_ctx *sec_ctx,
|
||||
u32 secid);
|
||||
void (*xfrm_state_free_security) (struct xfrm_state *x);
|
||||
int (*xfrm_state_delete_security) (struct xfrm_state *x);
|
||||
int (*xfrm_policy_lookup)(struct xfrm_policy *xp, u32 fl_secid, u8 dir);
|
||||
int (*xfrm_policy_lookup)(struct xfrm_sec_ctx *ctx, u32 fl_secid, u8 dir);
|
||||
int (*xfrm_state_pol_flow_match)(struct xfrm_state *x,
|
||||
struct xfrm_policy *xp, struct flowi *fl);
|
||||
int (*xfrm_decode_session)(struct sk_buff *skb, u32 *secid, int ckall);
|
||||
@@ -2562,16 +2562,16 @@ static inline void security_inet_conn_established(struct sock *sk,
|
||||
|
||||
#ifdef CONFIG_SECURITY_NETWORK_XFRM
|
||||
|
||||
int security_xfrm_policy_alloc(struct xfrm_policy *xp, struct xfrm_user_sec_ctx *sec_ctx);
|
||||
int security_xfrm_policy_clone(struct xfrm_policy *old, struct xfrm_policy *new);
|
||||
void security_xfrm_policy_free(struct xfrm_policy *xp);
|
||||
int security_xfrm_policy_delete(struct xfrm_policy *xp);
|
||||
int security_xfrm_policy_alloc(struct xfrm_sec_ctx **ctxp, struct xfrm_user_sec_ctx *sec_ctx);
|
||||
int security_xfrm_policy_clone(struct xfrm_sec_ctx *old_ctx, struct xfrm_sec_ctx **new_ctxp);
|
||||
void security_xfrm_policy_free(struct xfrm_sec_ctx *ctx);
|
||||
int security_xfrm_policy_delete(struct xfrm_sec_ctx *ctx);
|
||||
int security_xfrm_state_alloc(struct xfrm_state *x, struct xfrm_user_sec_ctx *sec_ctx);
|
||||
int security_xfrm_state_alloc_acquire(struct xfrm_state *x,
|
||||
struct xfrm_sec_ctx *polsec, u32 secid);
|
||||
int security_xfrm_state_delete(struct xfrm_state *x);
|
||||
void security_xfrm_state_free(struct xfrm_state *x);
|
||||
int security_xfrm_policy_lookup(struct xfrm_policy *xp, u32 fl_secid, u8 dir);
|
||||
int security_xfrm_policy_lookup(struct xfrm_sec_ctx *ctx, u32 fl_secid, u8 dir);
|
||||
int security_xfrm_state_pol_flow_match(struct xfrm_state *x,
|
||||
struct xfrm_policy *xp, struct flowi *fl);
|
||||
int security_xfrm_decode_session(struct sk_buff *skb, u32 *secid);
|
||||
@@ -2579,21 +2579,21 @@ void security_skb_classify_flow(struct sk_buff *skb, struct flowi *fl);
|
||||
|
||||
#else /* CONFIG_SECURITY_NETWORK_XFRM */
|
||||
|
||||
static inline int security_xfrm_policy_alloc(struct xfrm_policy *xp, struct xfrm_user_sec_ctx *sec_ctx)
|
||||
static inline int security_xfrm_policy_alloc(struct xfrm_sec_ctx **ctxp, struct xfrm_user_sec_ctx *sec_ctx)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int security_xfrm_policy_clone(struct xfrm_policy *old, struct xfrm_policy *new)
|
||||
static inline int security_xfrm_policy_clone(struct xfrm_sec_ctx *old, struct xfrm_sec_ctx **new_ctxp)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void security_xfrm_policy_free(struct xfrm_policy *xp)
|
||||
static inline void security_xfrm_policy_free(struct xfrm_sec_ctx *ctx)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int security_xfrm_policy_delete(struct xfrm_policy *xp)
|
||||
static inline int security_xfrm_policy_delete(struct xfrm_sec_ctx *ctx)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -2619,7 +2619,7 @@ static inline int security_xfrm_state_delete(struct xfrm_state *x)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int security_xfrm_policy_lookup(struct xfrm_policy *xp, u32 fl_secid, u8 dir)
|
||||
static inline int security_xfrm_policy_lookup(struct xfrm_sec_ctx *ctx, u32 fl_secid, u8 dir)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -62,18 +62,5 @@ extern struct list_head *seq_list_start_head(struct list_head *head,
|
||||
extern struct list_head *seq_list_next(void *v, struct list_head *head,
|
||||
loff_t *ppos);
|
||||
|
||||
struct net;
|
||||
struct seq_net_private {
|
||||
struct net *net;
|
||||
};
|
||||
|
||||
int seq_open_net(struct inode *, struct file *,
|
||||
const struct seq_operations *, int);
|
||||
int seq_release_net(struct inode *, struct file *);
|
||||
static inline struct net *seq_file_net(struct seq_file *seq)
|
||||
{
|
||||
return ((struct seq_net_private *)seq->private)->net;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
#ifndef __SEQ_FILE_NET_H__
|
||||
#define __SEQ_FILE_NET_H__
|
||||
|
||||
#include <linux/seq_file.h>
|
||||
|
||||
struct net;
|
||||
extern struct net init_net;
|
||||
|
||||
struct seq_net_private {
|
||||
#ifdef CONFIG_NET_NS
|
||||
struct net *net;
|
||||
#endif
|
||||
};
|
||||
|
||||
int seq_open_net(struct inode *, struct file *,
|
||||
const struct seq_operations *, int);
|
||||
int seq_release_net(struct inode *, struct file *);
|
||||
static inline struct net *seq_file_net(struct seq_file *seq)
|
||||
{
|
||||
#ifdef CONFIG_NET_NS
|
||||
return ((struct seq_net_private *)seq->private)->net;
|
||||
#else
|
||||
return &init_net;
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
+51
-155
@@ -256,7 +256,10 @@ struct sk_buff {
|
||||
ktime_t tstamp;
|
||||
struct net_device *dev;
|
||||
|
||||
struct dst_entry *dst;
|
||||
union {
|
||||
struct dst_entry *dst;
|
||||
struct rtable *rtable;
|
||||
};
|
||||
struct sec_path *sp;
|
||||
|
||||
/*
|
||||
@@ -310,7 +313,10 @@ struct sk_buff {
|
||||
__u16 tc_verd; /* traffic control verdict */
|
||||
#endif
|
||||
#endif
|
||||
/* 2 byte hole */
|
||||
#ifdef CONFIG_IPV6_NDISC_NODETYPE
|
||||
__u8 ndisc_nodetype:2;
|
||||
#endif
|
||||
/* 14 bit hole */
|
||||
|
||||
#ifdef CONFIG_NET_DMA
|
||||
dma_cookie_t dma_cookie;
|
||||
@@ -657,11 +663,21 @@ static inline void skb_queue_head_init_class(struct sk_buff_head *list,
|
||||
}
|
||||
|
||||
/*
|
||||
* Insert an sk_buff at the start of a list.
|
||||
* Insert an sk_buff on a list.
|
||||
*
|
||||
* The "__skb_xxxx()" functions are the non-atomic ones that
|
||||
* can only be called with interrupts disabled.
|
||||
*/
|
||||
extern void skb_insert(struct sk_buff *old, struct sk_buff *newsk, struct sk_buff_head *list);
|
||||
static inline void __skb_insert(struct sk_buff *newsk,
|
||||
struct sk_buff *prev, struct sk_buff *next,
|
||||
struct sk_buff_head *list)
|
||||
{
|
||||
newsk->next = next;
|
||||
newsk->prev = prev;
|
||||
next->prev = prev->next = newsk;
|
||||
list->qlen++;
|
||||
}
|
||||
|
||||
/**
|
||||
* __skb_queue_after - queue a buffer at the list head
|
||||
@@ -678,13 +694,17 @@ static inline void __skb_queue_after(struct sk_buff_head *list,
|
||||
struct sk_buff *prev,
|
||||
struct sk_buff *newsk)
|
||||
{
|
||||
struct sk_buff *next;
|
||||
list->qlen++;
|
||||
__skb_insert(newsk, prev, prev->next, list);
|
||||
}
|
||||
|
||||
next = prev->next;
|
||||
newsk->next = next;
|
||||
newsk->prev = prev;
|
||||
next->prev = prev->next = newsk;
|
||||
extern void skb_append(struct sk_buff *old, struct sk_buff *newsk,
|
||||
struct sk_buff_head *list);
|
||||
|
||||
static inline void __skb_queue_before(struct sk_buff_head *list,
|
||||
struct sk_buff *next,
|
||||
struct sk_buff *newsk)
|
||||
{
|
||||
__skb_insert(newsk, next->prev, next, list);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -718,66 +738,7 @@ extern void skb_queue_tail(struct sk_buff_head *list, struct sk_buff *newsk);
|
||||
static inline void __skb_queue_tail(struct sk_buff_head *list,
|
||||
struct sk_buff *newsk)
|
||||
{
|
||||
struct sk_buff *prev, *next;
|
||||
|
||||
list->qlen++;
|
||||
next = (struct sk_buff *)list;
|
||||
prev = next->prev;
|
||||
newsk->next = next;
|
||||
newsk->prev = prev;
|
||||
next->prev = prev->next = newsk;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* __skb_dequeue - remove from the head of the queue
|
||||
* @list: list to dequeue from
|
||||
*
|
||||
* Remove the head of the list. This function does not take any locks
|
||||
* so must be used with appropriate locks held only. The head item is
|
||||
* returned or %NULL if the list is empty.
|
||||
*/
|
||||
extern struct sk_buff *skb_dequeue(struct sk_buff_head *list);
|
||||
static inline struct sk_buff *__skb_dequeue(struct sk_buff_head *list)
|
||||
{
|
||||
struct sk_buff *next, *prev, *result;
|
||||
|
||||
prev = (struct sk_buff *) list;
|
||||
next = prev->next;
|
||||
result = NULL;
|
||||
if (next != prev) {
|
||||
result = next;
|
||||
next = next->next;
|
||||
list->qlen--;
|
||||
next->prev = prev;
|
||||
prev->next = next;
|
||||
result->next = result->prev = NULL;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Insert a packet on a list.
|
||||
*/
|
||||
extern void skb_insert(struct sk_buff *old, struct sk_buff *newsk, struct sk_buff_head *list);
|
||||
static inline void __skb_insert(struct sk_buff *newsk,
|
||||
struct sk_buff *prev, struct sk_buff *next,
|
||||
struct sk_buff_head *list)
|
||||
{
|
||||
newsk->next = next;
|
||||
newsk->prev = prev;
|
||||
next->prev = prev->next = newsk;
|
||||
list->qlen++;
|
||||
}
|
||||
|
||||
/*
|
||||
* Place a packet after a given packet in a list.
|
||||
*/
|
||||
extern void skb_append(struct sk_buff *old, struct sk_buff *newsk, struct sk_buff_head *list);
|
||||
static inline void __skb_append(struct sk_buff *old, struct sk_buff *newsk, struct sk_buff_head *list)
|
||||
{
|
||||
__skb_insert(newsk, old, old->next, list);
|
||||
__skb_queue_before(list, (struct sk_buff *)list, newsk);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -797,8 +758,22 @@ static inline void __skb_unlink(struct sk_buff *skb, struct sk_buff_head *list)
|
||||
prev->next = next;
|
||||
}
|
||||
|
||||
|
||||
/* XXX: more streamlined implementation */
|
||||
/**
|
||||
* __skb_dequeue - remove from the head of the queue
|
||||
* @list: list to dequeue from
|
||||
*
|
||||
* Remove the head of the list. This function does not take any locks
|
||||
* so must be used with appropriate locks held only. The head item is
|
||||
* returned or %NULL if the list is empty.
|
||||
*/
|
||||
extern struct sk_buff *skb_dequeue(struct sk_buff_head *list);
|
||||
static inline struct sk_buff *__skb_dequeue(struct sk_buff_head *list)
|
||||
{
|
||||
struct sk_buff *skb = skb_peek(list);
|
||||
if (skb)
|
||||
__skb_unlink(skb, list);
|
||||
return skb;
|
||||
}
|
||||
|
||||
/**
|
||||
* __skb_dequeue_tail - remove from the tail of the queue
|
||||
@@ -889,6 +864,7 @@ static inline void skb_set_tail_pointer(struct sk_buff *skb, const int offset)
|
||||
/*
|
||||
* Add data to an sk_buff
|
||||
*/
|
||||
extern unsigned char *skb_put(struct sk_buff *skb, unsigned int len);
|
||||
static inline unsigned char *__skb_put(struct sk_buff *skb, unsigned int len)
|
||||
{
|
||||
unsigned char *tmp = skb_tail_pointer(skb);
|
||||
@@ -898,26 +874,7 @@ static inline unsigned char *__skb_put(struct sk_buff *skb, unsigned int len)
|
||||
return tmp;
|
||||
}
|
||||
|
||||
/**
|
||||
* skb_put - add data to a buffer
|
||||
* @skb: buffer to use
|
||||
* @len: amount of data to add
|
||||
*
|
||||
* This function extends the used data area of the buffer. If this would
|
||||
* exceed the total buffer size the kernel will panic. A pointer to the
|
||||
* first byte of the extra data is returned.
|
||||
*/
|
||||
static inline unsigned char *skb_put(struct sk_buff *skb, unsigned int len)
|
||||
{
|
||||
unsigned char *tmp = skb_tail_pointer(skb);
|
||||
SKB_LINEAR_ASSERT(skb);
|
||||
skb->tail += len;
|
||||
skb->len += len;
|
||||
if (unlikely(skb->tail > skb->end))
|
||||
skb_over_panic(skb, len, current_text_addr());
|
||||
return tmp;
|
||||
}
|
||||
|
||||
extern unsigned char *skb_push(struct sk_buff *skb, unsigned int len);
|
||||
static inline unsigned char *__skb_push(struct sk_buff *skb, unsigned int len)
|
||||
{
|
||||
skb->data -= len;
|
||||
@@ -925,24 +882,7 @@ static inline unsigned char *__skb_push(struct sk_buff *skb, unsigned int len)
|
||||
return skb->data;
|
||||
}
|
||||
|
||||
/**
|
||||
* skb_push - add data to the start of a buffer
|
||||
* @skb: buffer to use
|
||||
* @len: amount of data to add
|
||||
*
|
||||
* This function extends the used data area of the buffer at the buffer
|
||||
* start. If this would exceed the total buffer headroom the kernel will
|
||||
* panic. A pointer to the first byte of the extra data is returned.
|
||||
*/
|
||||
static inline unsigned char *skb_push(struct sk_buff *skb, unsigned int len)
|
||||
{
|
||||
skb->data -= len;
|
||||
skb->len += len;
|
||||
if (unlikely(skb->data<skb->head))
|
||||
skb_under_panic(skb, len, current_text_addr());
|
||||
return skb->data;
|
||||
}
|
||||
|
||||
extern unsigned char *skb_pull(struct sk_buff *skb, unsigned int len);
|
||||
static inline unsigned char *__skb_pull(struct sk_buff *skb, unsigned int len)
|
||||
{
|
||||
skb->len -= len;
|
||||
@@ -950,21 +890,6 @@ static inline unsigned char *__skb_pull(struct sk_buff *skb, unsigned int len)
|
||||
return skb->data += len;
|
||||
}
|
||||
|
||||
/**
|
||||
* skb_pull - remove data from the start of a buffer
|
||||
* @skb: buffer to use
|
||||
* @len: amount of data to remove
|
||||
*
|
||||
* This function removes data from the start of a buffer, returning
|
||||
* the memory to the headroom. A pointer to the next data in the buffer
|
||||
* is returned. Once the data has been pulled future pushes will overwrite
|
||||
* the old data.
|
||||
*/
|
||||
static inline unsigned char *skb_pull(struct sk_buff *skb, unsigned int len)
|
||||
{
|
||||
return unlikely(len > skb->len) ? NULL : __skb_pull(skb, len);
|
||||
}
|
||||
|
||||
extern unsigned char *__pskb_pull_tail(struct sk_buff *skb, int delta);
|
||||
|
||||
static inline unsigned char *__pskb_pull(struct sk_buff *skb, unsigned int len)
|
||||
@@ -1205,21 +1130,7 @@ static inline void __skb_trim(struct sk_buff *skb, unsigned int len)
|
||||
skb_set_tail_pointer(skb, len);
|
||||
}
|
||||
|
||||
/**
|
||||
* skb_trim - remove end from a buffer
|
||||
* @skb: buffer to alter
|
||||
* @len: new length
|
||||
*
|
||||
* Cut the length of a buffer down by removing data from the tail. If
|
||||
* the buffer is already under the length specified it is not modified.
|
||||
* The skb must be linear.
|
||||
*/
|
||||
static inline void skb_trim(struct sk_buff *skb, unsigned int len)
|
||||
{
|
||||
if (skb->len > len)
|
||||
__skb_trim(skb, len);
|
||||
}
|
||||
|
||||
extern void skb_trim(struct sk_buff *skb, unsigned int len);
|
||||
|
||||
static inline int __pskb_trim(struct sk_buff *skb, unsigned int len)
|
||||
{
|
||||
@@ -1302,22 +1213,7 @@ static inline struct sk_buff *__dev_alloc_skb(unsigned int length,
|
||||
return skb;
|
||||
}
|
||||
|
||||
/**
|
||||
* dev_alloc_skb - allocate an skbuff for receiving
|
||||
* @length: length to allocate
|
||||
*
|
||||
* Allocate a new &sk_buff and assign it a usage count of one. The
|
||||
* buffer has unspecified headroom built in. Users should allocate
|
||||
* the headroom they think they need without accounting for the
|
||||
* built in space. The built in space is used for optimisations.
|
||||
*
|
||||
* %NULL is returned if there is no free memory. Although this function
|
||||
* allocates memory it can be called from an interrupt.
|
||||
*/
|
||||
static inline struct sk_buff *dev_alloc_skb(unsigned int length)
|
||||
{
|
||||
return __dev_alloc_skb(length, GFP_ATOMIC);
|
||||
}
|
||||
extern struct sk_buff *dev_alloc_skb(unsigned int length);
|
||||
|
||||
extern struct sk_buff *__netdev_alloc_skb(struct net_device *dev,
|
||||
unsigned int length, gfp_t gfp_mask);
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
#ifndef __SMC91X_H__
|
||||
#define __SMC91X_H__
|
||||
|
||||
#define SMC91X_USE_8BIT (1 << 0)
|
||||
#define SMC91X_USE_16BIT (1 << 1)
|
||||
#define SMC91X_USE_32BIT (1 << 2)
|
||||
|
||||
struct smc91x_platdata {
|
||||
unsigned long flags;
|
||||
unsigned long irq_flags; /* IRQF_... */
|
||||
};
|
||||
|
||||
#endif /* __SMC91X_H__ */
|
||||
+45
-5
@@ -72,10 +72,18 @@ struct ssb_device;
|
||||
/* Lowlevel read/write operations on the device MMIO.
|
||||
* Internal, don't use that outside of ssb. */
|
||||
struct ssb_bus_ops {
|
||||
u8 (*read8)(struct ssb_device *dev, u16 offset);
|
||||
u16 (*read16)(struct ssb_device *dev, u16 offset);
|
||||
u32 (*read32)(struct ssb_device *dev, u16 offset);
|
||||
void (*write8)(struct ssb_device *dev, u16 offset, u8 value);
|
||||
void (*write16)(struct ssb_device *dev, u16 offset, u16 value);
|
||||
void (*write32)(struct ssb_device *dev, u16 offset, u32 value);
|
||||
#ifdef CONFIG_SSB_BLOCKIO
|
||||
void (*block_read)(struct ssb_device *dev, void *buffer,
|
||||
size_t count, u16 offset, u8 reg_width);
|
||||
void (*block_write)(struct ssb_device *dev, const void *buffer,
|
||||
size_t count, u16 offset, u8 reg_width);
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
@@ -247,9 +255,9 @@ struct ssb_bus {
|
||||
/* Pointer to the PCMCIA device (only if bustype == SSB_BUSTYPE_PCMCIA). */
|
||||
struct pcmcia_device *host_pcmcia;
|
||||
|
||||
#ifdef CONFIG_SSB_PCIHOST
|
||||
#ifdef CONFIG_SSB_SPROM
|
||||
/* Mutex to protect the SPROM writing. */
|
||||
struct mutex pci_sprom_mutex;
|
||||
struct mutex sprom_mutex;
|
||||
#endif
|
||||
|
||||
/* ID information about the Chip. */
|
||||
@@ -262,9 +270,6 @@ struct ssb_bus {
|
||||
struct ssb_device devices[SSB_MAX_NR_CORES];
|
||||
u8 nr_devices;
|
||||
|
||||
/* Reference count. Number of suspended devices. */
|
||||
u8 suspend_cnt;
|
||||
|
||||
/* Software ID number for this bus. */
|
||||
unsigned int busnumber;
|
||||
|
||||
@@ -336,6 +341,13 @@ extern int ssb_bus_pcmciabus_register(struct ssb_bus *bus,
|
||||
|
||||
extern void ssb_bus_unregister(struct ssb_bus *bus);
|
||||
|
||||
/* Suspend a SSB bus.
|
||||
* Call this from the parent bus suspend routine. */
|
||||
extern int ssb_bus_suspend(struct ssb_bus *bus);
|
||||
/* Resume a SSB bus.
|
||||
* Call this from the parent bus resume routine. */
|
||||
extern int ssb_bus_resume(struct ssb_bus *bus);
|
||||
|
||||
extern u32 ssb_clockspeed(struct ssb_bus *bus);
|
||||
|
||||
/* Is the device enabled in hardware? */
|
||||
@@ -348,6 +360,10 @@ void ssb_device_disable(struct ssb_device *dev, u32 core_specific_flags);
|
||||
|
||||
|
||||
/* Device MMIO register read/write functions. */
|
||||
static inline u8 ssb_read8(struct ssb_device *dev, u16 offset)
|
||||
{
|
||||
return dev->ops->read8(dev, offset);
|
||||
}
|
||||
static inline u16 ssb_read16(struct ssb_device *dev, u16 offset)
|
||||
{
|
||||
return dev->ops->read16(dev, offset);
|
||||
@@ -356,6 +372,10 @@ static inline u32 ssb_read32(struct ssb_device *dev, u16 offset)
|
||||
{
|
||||
return dev->ops->read32(dev, offset);
|
||||
}
|
||||
static inline void ssb_write8(struct ssb_device *dev, u16 offset, u8 value)
|
||||
{
|
||||
dev->ops->write8(dev, offset, value);
|
||||
}
|
||||
static inline void ssb_write16(struct ssb_device *dev, u16 offset, u16 value)
|
||||
{
|
||||
dev->ops->write16(dev, offset, value);
|
||||
@@ -364,6 +384,19 @@ static inline void ssb_write32(struct ssb_device *dev, u16 offset, u32 value)
|
||||
{
|
||||
dev->ops->write32(dev, offset, value);
|
||||
}
|
||||
#ifdef CONFIG_SSB_BLOCKIO
|
||||
static inline void ssb_block_read(struct ssb_device *dev, void *buffer,
|
||||
size_t count, u16 offset, u8 reg_width)
|
||||
{
|
||||
dev->ops->block_read(dev, buffer, count, offset, reg_width);
|
||||
}
|
||||
|
||||
static inline void ssb_block_write(struct ssb_device *dev, const void *buffer,
|
||||
size_t count, u16 offset, u8 reg_width)
|
||||
{
|
||||
dev->ops->block_write(dev, buffer, count, offset, reg_width);
|
||||
}
|
||||
#endif /* CONFIG_SSB_BLOCKIO */
|
||||
|
||||
|
||||
/* Translation (routing) bits that need to be ORed to DMA
|
||||
@@ -416,5 +449,12 @@ extern int ssb_bus_powerup(struct ssb_bus *bus, bool dynamic_pctl);
|
||||
extern u32 ssb_admatch_base(u32 adm);
|
||||
extern u32 ssb_admatch_size(u32 adm);
|
||||
|
||||
/* PCI device mapping and fixup routines.
|
||||
* Called from the architecture pcibios init code.
|
||||
* These are only available on SSB_EMBEDDED configurations. */
|
||||
#ifdef CONFIG_SSB_EMBEDDED
|
||||
int ssb_pcibios_plat_dev_init(struct pci_dev *dev);
|
||||
int ssb_pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin);
|
||||
#endif /* CONFIG_SSB_EMBEDDED */
|
||||
|
||||
#endif /* LINUX_SSB_H_ */
|
||||
|
||||
@@ -367,8 +367,7 @@ static inline bool ssb_chipco_available(struct ssb_chipcommon *cc)
|
||||
|
||||
extern void ssb_chipcommon_init(struct ssb_chipcommon *cc);
|
||||
|
||||
#include <linux/pm.h>
|
||||
extern void ssb_chipco_suspend(struct ssb_chipcommon *cc, pm_message_t state);
|
||||
extern void ssb_chipco_suspend(struct ssb_chipcommon *cc);
|
||||
extern void ssb_chipco_resume(struct ssb_chipcommon *cc);
|
||||
|
||||
extern void ssb_chipco_get_clockcpu(struct ssb_chipcommon *cc,
|
||||
@@ -390,6 +389,10 @@ extern void ssb_chipco_set_clockmode(struct ssb_chipcommon *cc,
|
||||
extern void ssb_chipco_watchdog_timer_set(struct ssb_chipcommon *cc,
|
||||
u32 ticks);
|
||||
|
||||
void ssb_chipco_irq_mask(struct ssb_chipcommon *cc, u32 mask, u32 value);
|
||||
|
||||
u32 ssb_chipco_irq_status(struct ssb_chipcommon *cc, u32 mask);
|
||||
|
||||
/* Chipcommon GPIO pin access. */
|
||||
u32 ssb_chipco_gpio_in(struct ssb_chipcommon *cc, u32 mask);
|
||||
u32 ssb_chipco_gpio_out(struct ssb_chipcommon *cc, u32 mask, u32 value);
|
||||
|
||||
@@ -0,0 +1,174 @@
|
||||
#ifndef LINUX_SSB_DRIVER_GIGE_H_
|
||||
#define LINUX_SSB_DRIVER_GIGE_H_
|
||||
|
||||
#include <linux/ssb/ssb.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
|
||||
#ifdef CONFIG_SSB_DRIVER_GIGE
|
||||
|
||||
|
||||
#define SSB_GIGE_PCIIO 0x0000 /* PCI I/O Registers (1024 bytes) */
|
||||
#define SSB_GIGE_RESERVED 0x0400 /* Reserved (1024 bytes) */
|
||||
#define SSB_GIGE_PCICFG 0x0800 /* PCI config space (256 bytes) */
|
||||
#define SSB_GIGE_SHIM_FLUSHSTAT 0x0C00 /* PCI to OCP: Flush status control (32bit) */
|
||||
#define SSB_GIGE_SHIM_FLUSHRDA 0x0C04 /* PCI to OCP: Flush read address (32bit) */
|
||||
#define SSB_GIGE_SHIM_FLUSHTO 0x0C08 /* PCI to OCP: Flush timeout counter (32bit) */
|
||||
#define SSB_GIGE_SHIM_BARRIER 0x0C0C /* PCI to OCP: Barrier register (32bit) */
|
||||
#define SSB_GIGE_SHIM_MAOCPSI 0x0C10 /* PCI to OCP: MaocpSI Control (32bit) */
|
||||
#define SSB_GIGE_SHIM_SIOCPMA 0x0C14 /* PCI to OCP: SiocpMa Control (32bit) */
|
||||
|
||||
/* TM Status High flags */
|
||||
#define SSB_GIGE_TMSHIGH_RGMII 0x00010000 /* Have an RGMII PHY-bus */
|
||||
/* TM Status Low flags */
|
||||
#define SSB_GIGE_TMSLOW_TXBYPASS 0x00080000 /* TX bypass (no delay) */
|
||||
#define SSB_GIGE_TMSLOW_RXBYPASS 0x00100000 /* RX bypass (no delay) */
|
||||
#define SSB_GIGE_TMSLOW_DLLEN 0x01000000 /* Enable DLL controls */
|
||||
|
||||
/* Boardflags (low) */
|
||||
#define SSB_GIGE_BFL_ROBOSWITCH 0x0010
|
||||
|
||||
|
||||
#define SSB_GIGE_MEM_RES_NAME "SSB Broadcom 47xx GigE memory"
|
||||
#define SSB_GIGE_IO_RES_NAME "SSB Broadcom 47xx GigE I/O"
|
||||
|
||||
struct ssb_gige {
|
||||
struct ssb_device *dev;
|
||||
|
||||
spinlock_t lock;
|
||||
|
||||
/* True, if the device has an RGMII bus.
|
||||
* False, if the device has a GMII bus. */
|
||||
bool has_rgmii;
|
||||
|
||||
/* The PCI controller device. */
|
||||
struct pci_controller pci_controller;
|
||||
struct pci_ops pci_ops;
|
||||
struct resource mem_resource;
|
||||
struct resource io_resource;
|
||||
};
|
||||
|
||||
/* Check whether a PCI device is a SSB Gigabit Ethernet core. */
|
||||
extern bool pdev_is_ssb_gige_core(struct pci_dev *pdev);
|
||||
|
||||
/* Convert a pci_dev pointer to a ssb_gige pointer. */
|
||||
static inline struct ssb_gige * pdev_to_ssb_gige(struct pci_dev *pdev)
|
||||
{
|
||||
if (!pdev_is_ssb_gige_core(pdev))
|
||||
return NULL;
|
||||
return container_of(pdev->bus->ops, struct ssb_gige, pci_ops);
|
||||
}
|
||||
|
||||
/* Returns whether the PHY is connected by an RGMII bus. */
|
||||
static inline bool ssb_gige_is_rgmii(struct pci_dev *pdev)
|
||||
{
|
||||
struct ssb_gige *dev = pdev_to_ssb_gige(pdev);
|
||||
return (dev ? dev->has_rgmii : 0);
|
||||
}
|
||||
|
||||
/* Returns whether we have a Roboswitch. */
|
||||
static inline bool ssb_gige_have_roboswitch(struct pci_dev *pdev)
|
||||
{
|
||||
struct ssb_gige *dev = pdev_to_ssb_gige(pdev);
|
||||
if (dev)
|
||||
return !!(dev->dev->bus->sprom.boardflags_lo &
|
||||
SSB_GIGE_BFL_ROBOSWITCH);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Returns whether we can only do one DMA at once. */
|
||||
static inline bool ssb_gige_one_dma_at_once(struct pci_dev *pdev)
|
||||
{
|
||||
struct ssb_gige *dev = pdev_to_ssb_gige(pdev);
|
||||
if (dev)
|
||||
return ((dev->dev->bus->chip_id == 0x4785) &&
|
||||
(dev->dev->bus->chip_rev < 2));
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Returns whether we must flush posted writes. */
|
||||
static inline bool ssb_gige_must_flush_posted_writes(struct pci_dev *pdev)
|
||||
{
|
||||
struct ssb_gige *dev = pdev_to_ssb_gige(pdev);
|
||||
if (dev)
|
||||
return (dev->dev->bus->chip_id == 0x4785);
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern char * nvram_get(const char *name);
|
||||
/* Get the device MAC address */
|
||||
static inline void ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr)
|
||||
{
|
||||
#ifdef CONFIG_BCM947XX
|
||||
char *res = nvram_get("et0macaddr");
|
||||
if (res)
|
||||
memcpy(macaddr, res, 6);
|
||||
#endif
|
||||
}
|
||||
|
||||
extern int ssb_gige_pcibios_plat_dev_init(struct ssb_device *sdev,
|
||||
struct pci_dev *pdev);
|
||||
extern int ssb_gige_map_irq(struct ssb_device *sdev,
|
||||
const struct pci_dev *pdev);
|
||||
|
||||
/* The GigE driver is not a standalone module, because we don't have support
|
||||
* for unregistering the driver. So we could not unload the module anyway. */
|
||||
extern int ssb_gige_init(void);
|
||||
static inline void ssb_gige_exit(void)
|
||||
{
|
||||
/* Currently we can not unregister the GigE driver,
|
||||
* because we can not unregister the PCI bridge. */
|
||||
BUG();
|
||||
}
|
||||
|
||||
|
||||
#else /* CONFIG_SSB_DRIVER_GIGE */
|
||||
/* Gigabit Ethernet driver disabled */
|
||||
|
||||
|
||||
static inline int ssb_gige_pcibios_plat_dev_init(struct ssb_device *sdev,
|
||||
struct pci_dev *pdev)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
static inline int ssb_gige_map_irq(struct ssb_device *sdev,
|
||||
const struct pci_dev *pdev)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
static inline int ssb_gige_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline void ssb_gige_exit(void)
|
||||
{
|
||||
}
|
||||
|
||||
static inline bool pdev_is_ssb_gige_core(struct pci_dev *pdev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline struct ssb_gige * pdev_to_ssb_gige(struct pci_dev *pdev)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
static inline bool ssb_gige_is_rgmii(struct pci_dev *pdev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline bool ssb_gige_have_roboswitch(struct pci_dev *pdev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline bool ssb_gige_one_dma_at_once(struct pci_dev *pdev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline bool ssb_gige_must_flush_posted_writes(struct pci_dev *pdev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_SSB_DRIVER_GIGE */
|
||||
#endif /* LINUX_SSB_DRIVER_GIGE_H_ */
|
||||
@@ -1,6 +1,11 @@
|
||||
#ifndef LINUX_SSB_PCICORE_H_
|
||||
#define LINUX_SSB_PCICORE_H_
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
struct pci_dev;
|
||||
|
||||
|
||||
#ifdef CONFIG_SSB_DRIVER_PCICORE
|
||||
|
||||
/* PCI core registers. */
|
||||
@@ -88,6 +93,9 @@ extern void ssb_pcicore_init(struct ssb_pcicore *pc);
|
||||
extern int ssb_pcicore_dev_irqvecs_enable(struct ssb_pcicore *pc,
|
||||
struct ssb_device *dev);
|
||||
|
||||
int ssb_pcicore_plat_dev_init(struct pci_dev *d);
|
||||
int ssb_pcicore_pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin);
|
||||
|
||||
|
||||
#else /* CONFIG_SSB_DRIVER_PCICORE */
|
||||
|
||||
@@ -107,5 +115,16 @@ int ssb_pcicore_dev_irqvecs_enable(struct ssb_pcicore *pc,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline
|
||||
int ssb_pcicore_plat_dev_init(struct pci_dev *d)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
static inline
|
||||
int ssb_pcicore_pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_SSB_DRIVER_PCICORE */
|
||||
#endif /* LINUX_SSB_PCICORE_H_ */
|
||||
|
||||
@@ -239,6 +239,11 @@ static inline struct tcp_request_sock *tcp_rsk(const struct request_sock *req)
|
||||
return (struct tcp_request_sock *)req;
|
||||
}
|
||||
|
||||
struct tcp_deferred_accept_info {
|
||||
struct sock *listen_sk;
|
||||
struct request_sock *request;
|
||||
};
|
||||
|
||||
struct tcp_sock {
|
||||
/* inet_connection_sock has to be the first member of tcp_sock */
|
||||
struct inet_connection_sock inet_conn;
|
||||
@@ -374,6 +379,8 @@ struct tcp_sock {
|
||||
unsigned int keepalive_intvl; /* time interval between keep alive probes */
|
||||
int linger2;
|
||||
|
||||
struct tcp_deferred_accept_info defer_tcp_accept;
|
||||
|
||||
unsigned long last_synq_overflow;
|
||||
|
||||
u32 tso_deferred;
|
||||
|
||||
+8
-11
@@ -26,15 +26,6 @@ struct udphdr {
|
||||
__sum16 check;
|
||||
};
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/skbuff.h>
|
||||
|
||||
static inline struct udphdr *udp_hdr(const struct sk_buff *skb)
|
||||
{
|
||||
return (struct udphdr *)skb_transport_header(skb);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* UDP socket options */
|
||||
#define UDP_CORK 1 /* Never send partially complete segments */
|
||||
#define UDP_ENCAP 100 /* Set the socket to accept encapsulated packets */
|
||||
@@ -45,9 +36,14 @@ static inline struct udphdr *udp_hdr(const struct sk_buff *skb)
|
||||
#define UDP_ENCAP_L2TPINUDP 3 /* rfc2661 */
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/types.h>
|
||||
|
||||
#include <net/inet_sock.h>
|
||||
#include <linux/skbuff.h>
|
||||
|
||||
static inline struct udphdr *udp_hdr(const struct sk_buff *skb)
|
||||
{
|
||||
return (struct udphdr *)skb_transport_header(skb);
|
||||
}
|
||||
|
||||
#define UDP_HTABLE_SIZE 128
|
||||
|
||||
struct udp_sock {
|
||||
@@ -82,6 +78,7 @@ static inline struct udp_sock *udp_sk(const struct sock *sk)
|
||||
{
|
||||
return (struct udp_sock *)sk;
|
||||
}
|
||||
|
||||
#define IS_UDPLITE(__sk) (udp_sk(__sk)->pcflag)
|
||||
|
||||
#endif
|
||||
|
||||
@@ -455,6 +455,7 @@
|
||||
#define IW_MODE_REPEAT 4 /* Wireless Repeater (forwarder) */
|
||||
#define IW_MODE_SECOND 5 /* Secondary master/repeater (backup) */
|
||||
#define IW_MODE_MONITOR 6 /* Passive monitor (listen only) */
|
||||
#define IW_MODE_MESH 7 /* Mesh (IEEE 802.11s) network */
|
||||
|
||||
/* Statistics flags (bitmask in updated) */
|
||||
#define IW_QUAL_QUAL_UPDATED 0x01 /* Value was updated since last read */
|
||||
|
||||
@@ -113,7 +113,8 @@ enum
|
||||
{
|
||||
XFRM_POLICY_TYPE_MAIN = 0,
|
||||
XFRM_POLICY_TYPE_SUB = 1,
|
||||
XFRM_POLICY_TYPE_MAX = 2
|
||||
XFRM_POLICY_TYPE_MAX = 2,
|
||||
XFRM_POLICY_TYPE_ANY = 255
|
||||
};
|
||||
|
||||
enum
|
||||
|
||||
Reference in New Issue
Block a user