Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6

* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6:
  [NETLABEL]: Fix build failure.
  [IPV6]: Give sit driver an appropriate module alias.
  [IPV6]: Add ndisc_netdev_notifier unregister.
  [NET]: __alloc_pages() failures reported due to fragmentation
  [PKTGEN]: TCI endianness fixes
  [TG3]: Fix 2nd ifup failure on 5752M.
  [NETFILTER] bug: skb->protocol is already net-endian
  [NETFILTER] bug: nfulnl_msg_config_mode ->copy_range is 32bit
  [NETFILTER] bug: NFULA_CFG_QTHRESH uses 32bit
  [IPV6]: Fix ECN bug on big-endian
  [IPX]: Annotate and fix IPX checksum
  [IPX]: Trivial parts of endianness annotations
This commit is contained in:
Linus Torvalds 2006-11-05 19:10:04 -08:00
Родитель 59359ff877 38c94377a3
Коммит d1ed6a3ea1
15 изменённых файлов: 111 добавлений и 97 удалений

Просмотреть файл

@ -68,8 +68,8 @@
#define DRV_MODULE_NAME "tg3" #define DRV_MODULE_NAME "tg3"
#define PFX DRV_MODULE_NAME ": " #define PFX DRV_MODULE_NAME ": "
#define DRV_MODULE_VERSION "3.67" #define DRV_MODULE_VERSION "3.68"
#define DRV_MODULE_RELDATE "October 18, 2006" #define DRV_MODULE_RELDATE "November 02, 2006"
#define TG3_DEF_MAC_MODE 0 #define TG3_DEF_MAC_MODE 0
#define TG3_DEF_RX_MODE 0 #define TG3_DEF_RX_MODE 0
@ -6014,7 +6014,7 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy)
tg3_abort_hw(tp, 1); tg3_abort_hw(tp, 1);
} }
if ((tp->tg3_flags2 & TG3_FLG2_MII_SERDES) && reset_phy) if (reset_phy)
tg3_phy_reset(tp); tg3_phy_reset(tp);
err = tg3_chip_reset(tp); err = tg3_chip_reset(tp);
@ -6574,7 +6574,7 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy)
tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl); tw32(GRC_LOCAL_CTRL, tp->grc_local_ctrl);
} }
err = tg3_setup_phy(tp, reset_phy); err = tg3_setup_phy(tp, 0);
if (err) if (err)
return err; return err;

Просмотреть файл

@ -7,8 +7,8 @@
struct sockaddr_ipx { struct sockaddr_ipx {
sa_family_t sipx_family; sa_family_t sipx_family;
__u16 sipx_port; __be16 sipx_port;
__u32 sipx_network; __be32 sipx_network;
unsigned char sipx_node[IPX_NODE_LEN]; unsigned char sipx_node[IPX_NODE_LEN];
__u8 sipx_type; __u8 sipx_type;
unsigned char sipx_zero; /* 16 byte fill */ unsigned char sipx_zero; /* 16 byte fill */
@ -23,13 +23,13 @@ struct sockaddr_ipx {
#define IPX_CRTITF 1 #define IPX_CRTITF 1
struct ipx_route_definition { struct ipx_route_definition {
__u32 ipx_network; __be32 ipx_network;
__u32 ipx_router_network; __be32 ipx_router_network;
unsigned char ipx_router_node[IPX_NODE_LEN]; unsigned char ipx_router_node[IPX_NODE_LEN];
}; };
struct ipx_interface_definition { struct ipx_interface_definition {
__u32 ipx_network; __be32 ipx_network;
unsigned char ipx_device[16]; unsigned char ipx_device[16];
unsigned char ipx_dlink_type; unsigned char ipx_dlink_type;
#define IPX_FRAME_NONE 0 #define IPX_FRAME_NONE 0
@ -55,8 +55,8 @@ struct ipx_config_data {
*/ */
struct ipx_route_def { struct ipx_route_def {
__u32 ipx_network; __be32 ipx_network;
__u32 ipx_router_network; __be32 ipx_router_network;
#define IPX_ROUTE_NO_ROUTER 0 #define IPX_ROUTE_NO_ROUTER 0
unsigned char ipx_router_node[IPX_NODE_LEN]; unsigned char ipx_router_node[IPX_NODE_LEN];
unsigned char ipx_device[16]; unsigned char ipx_device[16];

Просмотреть файл

@ -48,7 +48,7 @@ static inline __u8 INET_ECN_encapsulate(__u8 outer, __u8 inner)
#define IP6_ECN_flow_xmit(sk, label) do { \ #define IP6_ECN_flow_xmit(sk, label) do { \
if (INET_ECN_is_capable(inet_sk(sk)->tos)) \ if (INET_ECN_is_capable(inet_sk(sk)->tos)) \
(label) |= __constant_htons(INET_ECN_ECT_0 << 4); \ (label) |= htonl(INET_ECN_ECT_0 << 20); \
} while (0) } while (0)
static inline int IP_ECN_set_ce(struct iphdr *iph) static inline int IP_ECN_set_ce(struct iphdr *iph)

Просмотреть файл

@ -15,9 +15,9 @@
#include <linux/list.h> #include <linux/list.h>
struct ipx_address { struct ipx_address {
__u32 net; __be32 net;
__u8 node[IPX_NODE_LEN]; __u8 node[IPX_NODE_LEN];
__u16 sock; __be16 sock;
}; };
#define ipx_broadcast_node "\377\377\377\377\377\377" #define ipx_broadcast_node "\377\377\377\377\377\377"
@ -26,9 +26,9 @@ struct ipx_address {
#define IPX_MAX_PPROP_HOPS 8 #define IPX_MAX_PPROP_HOPS 8
struct ipxhdr { struct ipxhdr {
__u16 ipx_checksum __attribute__ ((packed)); __be16 ipx_checksum __attribute__ ((packed));
#define IPX_NO_CHECKSUM 0xFFFF #define IPX_NO_CHECKSUM __constant_htons(0xFFFF)
__u16 ipx_pktsize __attribute__ ((packed)); __be16 ipx_pktsize __attribute__ ((packed));
__u8 ipx_tctrl; __u8 ipx_tctrl;
__u8 ipx_type; __u8 ipx_type;
#define IPX_TYPE_UNKNOWN 0x00 #define IPX_TYPE_UNKNOWN 0x00
@ -48,14 +48,14 @@ static __inline__ struct ipxhdr *ipx_hdr(struct sk_buff *skb)
struct ipx_interface { struct ipx_interface {
/* IPX address */ /* IPX address */
__u32 if_netnum; __be32 if_netnum;
unsigned char if_node[IPX_NODE_LEN]; unsigned char if_node[IPX_NODE_LEN];
atomic_t refcnt; atomic_t refcnt;
/* physical device info */ /* physical device info */
struct net_device *if_dev; struct net_device *if_dev;
struct datalink_proto *if_dlink; struct datalink_proto *if_dlink;
unsigned short if_dlink_type; __be16 if_dlink_type;
/* socket support */ /* socket support */
unsigned short if_sknum; unsigned short if_sknum;
@ -71,7 +71,7 @@ struct ipx_interface {
}; };
struct ipx_route { struct ipx_route {
__u32 ir_net; __be32 ir_net;
struct ipx_interface *ir_intrfc; struct ipx_interface *ir_intrfc;
unsigned char ir_routed; unsigned char ir_routed;
unsigned char ir_router_node[IPX_NODE_LEN]; unsigned char ir_router_node[IPX_NODE_LEN];
@ -82,10 +82,10 @@ struct ipx_route {
#ifdef __KERNEL__ #ifdef __KERNEL__
struct ipx_cb { struct ipx_cb {
u8 ipx_tctrl; u8 ipx_tctrl;
u32 ipx_dest_net; __be32 ipx_dest_net;
u32 ipx_source_net; __be32 ipx_source_net;
struct { struct {
u32 netnum; __be32 netnum;
int index; int index;
} last_hop; } last_hop;
}; };
@ -97,7 +97,7 @@ struct ipx_sock {
struct sock sk; struct sock sk;
struct ipx_address dest_addr; struct ipx_address dest_addr;
struct ipx_interface *intrfc; struct ipx_interface *intrfc;
unsigned short port; __be16 port;
#ifdef CONFIG_IPX_INTERN #ifdef CONFIG_IPX_INTERN
unsigned char node[IPX_NODE_LEN]; unsigned char node[IPX_NODE_LEN];
#endif #endif
@ -132,7 +132,7 @@ extern struct ipx_interface *ipx_primary_net;
extern int ipx_proc_init(void); extern int ipx_proc_init(void);
extern void ipx_proc_exit(void); extern void ipx_proc_exit(void);
extern const char *ipx_frame_name(unsigned short); extern const char *ipx_frame_name(__be16);
extern const char *ipx_device_name(struct ipx_interface *intrfc); extern const char *ipx_device_name(struct ipx_interface *intrfc);
static __inline__ void ipxitf_hold(struct ipx_interface *intrfc) static __inline__ void ipxitf_hold(struct ipx_interface *intrfc)

Просмотреть файл

@ -63,6 +63,7 @@ config INET
if INET if INET
source "net/ipv4/Kconfig" source "net/ipv4/Kconfig"
source "net/ipv6/Kconfig" source "net/ipv6/Kconfig"
source "net/netlabel/Kconfig"
endif # if INET endif # if INET
@ -249,8 +250,6 @@ source "net/ieee80211/Kconfig"
config WIRELESS_EXT config WIRELESS_EXT
bool bool
source "net/netlabel/Kconfig"
config FIB_RULES config FIB_RULES
bool bool

Просмотреть файл

@ -2304,6 +2304,12 @@ static void mpls_push(__be32 *mpls, struct pktgen_dev *pkt_dev)
*mpls |= MPLS_STACK_BOTTOM; *mpls |= MPLS_STACK_BOTTOM;
} }
static inline __be16 build_tci(unsigned int id, unsigned int cfi,
unsigned int prio)
{
return htons(id | (cfi << 12) | (prio << 13));
}
static struct sk_buff *fill_packet_ipv4(struct net_device *odev, static struct sk_buff *fill_packet_ipv4(struct net_device *odev,
struct pktgen_dev *pkt_dev) struct pktgen_dev *pkt_dev)
{ {
@ -2353,16 +2359,16 @@ static struct sk_buff *fill_packet_ipv4(struct net_device *odev,
if (pkt_dev->vlan_id != 0xffff) { if (pkt_dev->vlan_id != 0xffff) {
if(pkt_dev->svlan_id != 0xffff) { if(pkt_dev->svlan_id != 0xffff) {
svlan_tci = (__be16 *)skb_put(skb, sizeof(__be16)); svlan_tci = (__be16 *)skb_put(skb, sizeof(__be16));
*svlan_tci = htons(pkt_dev->svlan_id); *svlan_tci = build_tci(pkt_dev->svlan_id,
*svlan_tci |= pkt_dev->svlan_p << 5; pkt_dev->svlan_cfi,
*svlan_tci |= pkt_dev->svlan_cfi << 4; pkt_dev->svlan_p);
svlan_encapsulated_proto = (__be16 *)skb_put(skb, sizeof(__be16)); svlan_encapsulated_proto = (__be16 *)skb_put(skb, sizeof(__be16));
*svlan_encapsulated_proto = __constant_htons(ETH_P_8021Q); *svlan_encapsulated_proto = __constant_htons(ETH_P_8021Q);
} }
vlan_tci = (__be16 *)skb_put(skb, sizeof(__be16)); vlan_tci = (__be16 *)skb_put(skb, sizeof(__be16));
*vlan_tci = htons(pkt_dev->vlan_id); *vlan_tci = build_tci(pkt_dev->vlan_id,
*vlan_tci |= pkt_dev->vlan_p << 5; pkt_dev->vlan_cfi,
*vlan_tci |= pkt_dev->vlan_cfi << 4; pkt_dev->vlan_p);
vlan_encapsulated_proto = (__be16 *)skb_put(skb, sizeof(__be16)); vlan_encapsulated_proto = (__be16 *)skb_put(skb, sizeof(__be16));
*vlan_encapsulated_proto = __constant_htons(ETH_P_IP); *vlan_encapsulated_proto = __constant_htons(ETH_P_IP);
} }
@ -2689,16 +2695,16 @@ static struct sk_buff *fill_packet_ipv6(struct net_device *odev,
if (pkt_dev->vlan_id != 0xffff) { if (pkt_dev->vlan_id != 0xffff) {
if(pkt_dev->svlan_id != 0xffff) { if(pkt_dev->svlan_id != 0xffff) {
svlan_tci = (__be16 *)skb_put(skb, sizeof(__be16)); svlan_tci = (__be16 *)skb_put(skb, sizeof(__be16));
*svlan_tci = htons(pkt_dev->svlan_id); *svlan_tci = build_tci(pkt_dev->svlan_id,
*svlan_tci |= pkt_dev->svlan_p << 5; pkt_dev->svlan_cfi,
*svlan_tci |= pkt_dev->svlan_cfi << 4; pkt_dev->svlan_p);
svlan_encapsulated_proto = (__be16 *)skb_put(skb, sizeof(__be16)); svlan_encapsulated_proto = (__be16 *)skb_put(skb, sizeof(__be16));
*svlan_encapsulated_proto = __constant_htons(ETH_P_8021Q); *svlan_encapsulated_proto = __constant_htons(ETH_P_8021Q);
} }
vlan_tci = (__be16 *)skb_put(skb, sizeof(__be16)); vlan_tci = (__be16 *)skb_put(skb, sizeof(__be16));
*vlan_tci = htons(pkt_dev->vlan_id); *vlan_tci = build_tci(pkt_dev->vlan_id,
*vlan_tci |= pkt_dev->vlan_p << 5; pkt_dev->vlan_cfi,
*vlan_tci |= pkt_dev->vlan_cfi << 4; pkt_dev->vlan_p);
vlan_encapsulated_proto = (__be16 *)skb_put(skb, sizeof(__be16)); vlan_encapsulated_proto = (__be16 *)skb_put(skb, sizeof(__be16));
*vlan_encapsulated_proto = __constant_htons(ETH_P_IPV6); *vlan_encapsulated_proto = __constant_htons(ETH_P_IPV6);
} }

Просмотреть файл

@ -1160,7 +1160,7 @@ static struct sk_buff *sock_alloc_send_pskb(struct sock *sk,
goto failure; goto failure;
if (atomic_read(&sk->sk_wmem_alloc) < sk->sk_sndbuf) { if (atomic_read(&sk->sk_wmem_alloc) < sk->sk_sndbuf) {
skb = alloc_skb(header_len, sk->sk_allocation); skb = alloc_skb(header_len, gfp_mask);
if (skb) { if (skb) {
int npages; int npages;
int i; int i;

Просмотреть файл

@ -1742,6 +1742,7 @@ int __init ndisc_init(struct net_proto_family *ops)
void ndisc_cleanup(void) void ndisc_cleanup(void)
{ {
unregister_netdevice_notifier(&ndisc_netdev_notifier);
#ifdef CONFIG_SYSCTL #ifdef CONFIG_SYSCTL
neigh_sysctl_unregister(&nd_tbl.parms); neigh_sysctl_unregister(&nd_tbl.parms);
#endif #endif

Просмотреть файл

@ -854,3 +854,4 @@ int __init sit_init(void)
module_init(sit_init); module_init(sit_init);
module_exit(sit_cleanup); module_exit(sit_cleanup);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_ALIAS("sit0");

Просмотреть файл

@ -83,13 +83,13 @@ DEFINE_SPINLOCK(ipx_interfaces_lock);
struct ipx_interface *ipx_primary_net; struct ipx_interface *ipx_primary_net;
struct ipx_interface *ipx_internal_net; struct ipx_interface *ipx_internal_net;
extern int ipxrtr_add_route(__u32 network, struct ipx_interface *intrfc, extern int ipxrtr_add_route(__be32 network, struct ipx_interface *intrfc,
unsigned char *node); unsigned char *node);
extern void ipxrtr_del_routes(struct ipx_interface *intrfc); extern void ipxrtr_del_routes(struct ipx_interface *intrfc);
extern int ipxrtr_route_packet(struct sock *sk, struct sockaddr_ipx *usipx, extern int ipxrtr_route_packet(struct sock *sk, struct sockaddr_ipx *usipx,
struct iovec *iov, int len, int noblock); struct iovec *iov, int len, int noblock);
extern int ipxrtr_route_skb(struct sk_buff *skb); extern int ipxrtr_route_skb(struct sk_buff *skb);
extern struct ipx_route *ipxrtr_lookup(__u32 net); extern struct ipx_route *ipxrtr_lookup(__be32 net);
extern int ipxrtr_ioctl(unsigned int cmd, void __user *arg); extern int ipxrtr_ioctl(unsigned int cmd, void __user *arg);
#undef IPX_REFCNT_DEBUG #undef IPX_REFCNT_DEBUG
@ -177,7 +177,7 @@ static void ipxitf_clear_primary_net(void)
} }
static struct ipx_interface *__ipxitf_find_using_phys(struct net_device *dev, static struct ipx_interface *__ipxitf_find_using_phys(struct net_device *dev,
unsigned short datalink) __be16 datalink)
{ {
struct ipx_interface *i; struct ipx_interface *i;
@ -190,7 +190,7 @@ out:
} }
static struct ipx_interface *ipxitf_find_using_phys(struct net_device *dev, static struct ipx_interface *ipxitf_find_using_phys(struct net_device *dev,
unsigned short datalink) __be16 datalink)
{ {
struct ipx_interface *i; struct ipx_interface *i;
@ -202,7 +202,7 @@ static struct ipx_interface *ipxitf_find_using_phys(struct net_device *dev,
return i; return i;
} }
struct ipx_interface *ipxitf_find_using_net(__u32 net) struct ipx_interface *ipxitf_find_using_net(__be32 net)
{ {
struct ipx_interface *i; struct ipx_interface *i;
@ -237,7 +237,7 @@ static void ipxitf_insert_socket(struct ipx_interface *intrfc, struct sock *sk)
/* caller must hold intrfc->if_sklist_lock */ /* caller must hold intrfc->if_sklist_lock */
static struct sock *__ipxitf_find_socket(struct ipx_interface *intrfc, static struct sock *__ipxitf_find_socket(struct ipx_interface *intrfc,
unsigned short port) __be16 port)
{ {
struct sock *s; struct sock *s;
struct hlist_node *node; struct hlist_node *node;
@ -252,7 +252,7 @@ found:
/* caller must hold a reference to intrfc */ /* caller must hold a reference to intrfc */
static struct sock *ipxitf_find_socket(struct ipx_interface *intrfc, static struct sock *ipxitf_find_socket(struct ipx_interface *intrfc,
unsigned short port) __be16 port)
{ {
struct sock *s; struct sock *s;
@ -268,7 +268,7 @@ static struct sock *ipxitf_find_socket(struct ipx_interface *intrfc,
#ifdef CONFIG_IPX_INTERN #ifdef CONFIG_IPX_INTERN
static struct sock *ipxitf_find_internal_socket(struct ipx_interface *intrfc, static struct sock *ipxitf_find_internal_socket(struct ipx_interface *intrfc,
unsigned char *ipx_node, unsigned char *ipx_node,
unsigned short port) __be16 port)
{ {
struct sock *s; struct sock *s;
struct hlist_node *node; struct hlist_node *node;
@ -600,10 +600,10 @@ int ipxitf_send(struct ipx_interface *intrfc, struct sk_buff *skb, char *node)
/* see if we need to include the netnum in the route list */ /* see if we need to include the netnum in the route list */
if (IPX_SKB_CB(skb)->last_hop.index >= 0) { if (IPX_SKB_CB(skb)->last_hop.index >= 0) {
u32 *last_hop = (u32 *)(((u8 *) skb->data) + __be32 *last_hop = (__be32 *)(((u8 *) skb->data) +
sizeof(struct ipxhdr) + sizeof(struct ipxhdr) +
IPX_SKB_CB(skb)->last_hop.index * IPX_SKB_CB(skb)->last_hop.index *
sizeof(u32)); sizeof(__be32));
*last_hop = IPX_SKB_CB(skb)->last_hop.netnum; *last_hop = IPX_SKB_CB(skb)->last_hop.netnum;
IPX_SKB_CB(skb)->last_hop.index = -1; IPX_SKB_CB(skb)->last_hop.index = -1;
} }
@ -772,7 +772,7 @@ static void ipxitf_discover_netnum(struct ipx_interface *intrfc,
} else { } else {
printk(KERN_WARNING "IPX: Network number collision " printk(KERN_WARNING "IPX: Network number collision "
"%lx\n %s %s and %s %s\n", "%lx\n %s %s and %s %s\n",
(unsigned long) htonl(cb->ipx_source_net), (unsigned long) ntohl(cb->ipx_source_net),
ipx_device_name(i), ipx_device_name(i),
ipx_frame_name(i->if_dlink_type), ipx_frame_name(i->if_dlink_type),
ipx_device_name(intrfc), ipx_device_name(intrfc),
@ -812,7 +812,7 @@ static int ipxitf_pprop(struct ipx_interface *intrfc, struct sk_buff *skb)
int i, rc = -EINVAL; int i, rc = -EINVAL;
struct ipx_interface *ifcs; struct ipx_interface *ifcs;
char *c; char *c;
u32 *l; __be32 *l;
/* Illegal packet - too many hops or too short */ /* Illegal packet - too many hops or too short */
/* We decide to throw it away: no broadcasting, no local processing. /* We decide to throw it away: no broadcasting, no local processing.
@ -833,7 +833,7 @@ static int ipxitf_pprop(struct ipx_interface *intrfc, struct sk_buff *skb)
goto out; goto out;
c = ((u8 *) ipx) + sizeof(struct ipxhdr); c = ((u8 *) ipx) + sizeof(struct ipxhdr);
l = (u32 *) c; l = (__be32 *) c;
/* Don't broadcast packet if already seen this net */ /* Don't broadcast packet if already seen this net */
for (i = 0; i < IPX_SKB_CB(skb)->ipx_tctrl; i++) for (i = 0; i < IPX_SKB_CB(skb)->ipx_tctrl; i++)
@ -855,7 +855,7 @@ static int ipxitf_pprop(struct ipx_interface *intrfc, struct sk_buff *skb)
/* That aren't in the list */ /* That aren't in the list */
if (ifcs == intrfc) if (ifcs == intrfc)
continue; continue;
l = (__u32 *) c; l = (__be32 *) c;
/* don't consider the last entry in the packet list, /* don't consider the last entry in the packet list,
* it is our netnum, and it is not there yet */ * it is our netnum, and it is not there yet */
for (i = 0; i < IPX_SKB_CB(skb)->ipx_tctrl; i++) for (i = 0; i < IPX_SKB_CB(skb)->ipx_tctrl; i++)
@ -885,8 +885,8 @@ static void ipxitf_insert(struct ipx_interface *intrfc)
ipx_primary_net = intrfc; ipx_primary_net = intrfc;
} }
static struct ipx_interface *ipxitf_alloc(struct net_device *dev, __u32 netnum, static struct ipx_interface *ipxitf_alloc(struct net_device *dev, __be32 netnum,
unsigned short dlink_type, __be16 dlink_type,
struct datalink_proto *dlink, struct datalink_proto *dlink,
unsigned char internal, unsigned char internal,
int ipx_offset) int ipx_offset)
@ -960,7 +960,7 @@ static __be16 ipx_map_frame_type(unsigned char type)
static int ipxitf_create(struct ipx_interface_definition *idef) static int ipxitf_create(struct ipx_interface_definition *idef)
{ {
struct net_device *dev; struct net_device *dev;
unsigned short dlink_type = 0; __be16 dlink_type = 0;
struct datalink_proto *datalink = NULL; struct datalink_proto *datalink = NULL;
struct ipx_interface *intrfc; struct ipx_interface *intrfc;
int rc; int rc;
@ -1073,7 +1073,7 @@ out:
static int ipxitf_delete(struct ipx_interface_definition *idef) static int ipxitf_delete(struct ipx_interface_definition *idef)
{ {
struct net_device *dev = NULL; struct net_device *dev = NULL;
unsigned short dlink_type = 0; __be16 dlink_type = 0;
struct ipx_interface *intrfc; struct ipx_interface *intrfc;
int rc = 0; int rc = 0;
@ -1110,7 +1110,7 @@ out:
} }
static struct ipx_interface *ipxitf_auto_create(struct net_device *dev, static struct ipx_interface *ipxitf_auto_create(struct net_device *dev,
unsigned short dlink_type) __be16 dlink_type)
{ {
struct ipx_interface *intrfc = NULL; struct ipx_interface *intrfc = NULL;
struct datalink_proto *datalink; struct datalink_proto *datalink;
@ -1122,7 +1122,7 @@ static struct ipx_interface *ipxitf_auto_create(struct net_device *dev,
if (dev->addr_len > IPX_NODE_LEN) if (dev->addr_len > IPX_NODE_LEN)
goto out; goto out;
switch (htons(dlink_type)) { switch (ntohs(dlink_type)) {
case ETH_P_IPX: datalink = pEII_datalink; break; case ETH_P_IPX: datalink = pEII_datalink; break;
case ETH_P_802_2: datalink = p8022_datalink; break; case ETH_P_802_2: datalink = p8022_datalink; break;
case ETH_P_SNAP: datalink = pSNAP_datalink; break; case ETH_P_SNAP: datalink = pSNAP_datalink; break;
@ -1234,27 +1234,27 @@ static int ipxitf_ioctl(unsigned int cmd, void __user *arg)
/* Note: We assume ipx_tctrl==0 and htons(length)==ipx_pktsize */ /* Note: We assume ipx_tctrl==0 and htons(length)==ipx_pktsize */
/* This functions should *not* mess with packet contents */ /* This functions should *not* mess with packet contents */
__u16 ipx_cksum(struct ipxhdr *packet, int length) __be16 ipx_cksum(struct ipxhdr *packet, int length)
{ {
/* /*
* NOTE: sum is a net byte order quantity, which optimizes the * NOTE: sum is a net byte order quantity, which optimizes the
* loop. This only works on big and little endian machines. (I * loop. This only works on big and little endian machines. (I
* don't know of a machine that isn't.) * don't know of a machine that isn't.)
*/ */
/* start at ipx_dest - We skip the checksum field and start with /* handle the first 3 words separately; checksum should be skipped
* ipx_type before the loop, not considering ipx_tctrl in the calc */ * and ipx_tctrl masked out */
__u16 *p = (__u16 *)&packet->ipx_dest; __u16 *p = (__u16 *)packet;
__u32 i = (length >> 1) - 1; /* Number of complete words */ __u32 sum = p[1] + (p[2] & (__force u16)htons(0x00ff));
__u32 sum = packet->ipx_type << sizeof(packet->ipx_tctrl); __u32 i = (length >> 1) - 3; /* Number of remaining complete words */
/* Loop through all complete words except the checksum field, /* Loop through them */
* ipx_type (accounted above) and ipx_tctrl (not used in the cksum) */ p += 3;
while (--i) while (i--)
sum += *p++; sum += *p++;
/* Add on the last part word if it exists */ /* Add on the last part word if it exists */
if (packet->ipx_pktsize & htons(1)) if (packet->ipx_pktsize & htons(1))
sum += ntohs(0xff00) & *p; sum += (__force u16)htons(0xff00) & *p;
/* Do final fixup */ /* Do final fixup */
sum = (sum & 0xffff) + (sum >> 16); sum = (sum & 0xffff) + (sum >> 16);
@ -1263,10 +1263,17 @@ __u16 ipx_cksum(struct ipxhdr *packet, int length)
if (sum >= 0x10000) if (sum >= 0x10000)
sum++; sum++;
return ~sum; /*
* Leave 0 alone; we don't want 0xffff here. Note that we can't get
* here with 0x10000, so this check is the same as ((__u16)sum)
*/
if (sum)
sum = ~sum;
return (__force __be16)sum;
} }
const char *ipx_frame_name(unsigned short frame) const char *ipx_frame_name(__be16 frame)
{ {
char* rc = "None"; char* rc = "None";
@ -1401,7 +1408,7 @@ out:
/* caller must hold a reference to intrfc */ /* caller must hold a reference to intrfc */
static unsigned short ipx_first_free_socketnum(struct ipx_interface *intrfc) static __be16 ipx_first_free_socketnum(struct ipx_interface *intrfc)
{ {
unsigned short socketNum = intrfc->if_sknum; unsigned short socketNum = intrfc->if_sknum;
@ -1410,7 +1417,7 @@ static unsigned short ipx_first_free_socketnum(struct ipx_interface *intrfc)
if (socketNum < IPX_MIN_EPHEMERAL_SOCKET) if (socketNum < IPX_MIN_EPHEMERAL_SOCKET)
socketNum = IPX_MIN_EPHEMERAL_SOCKET; socketNum = IPX_MIN_EPHEMERAL_SOCKET;
while (__ipxitf_find_socket(intrfc, ntohs(socketNum))) while (__ipxitf_find_socket(intrfc, htons(socketNum)))
if (socketNum > IPX_MAX_EPHEMERAL_SOCKET) if (socketNum > IPX_MAX_EPHEMERAL_SOCKET)
socketNum = IPX_MIN_EPHEMERAL_SOCKET; socketNum = IPX_MIN_EPHEMERAL_SOCKET;
else else
@ -1419,7 +1426,7 @@ static unsigned short ipx_first_free_socketnum(struct ipx_interface *intrfc)
spin_unlock_bh(&intrfc->if_sklist_lock); spin_unlock_bh(&intrfc->if_sklist_lock);
intrfc->if_sknum = socketNum; intrfc->if_sknum = socketNum;
return ntohs(socketNum); return htons(socketNum);
} }
static int ipx_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) static int ipx_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
@ -1473,7 +1480,7 @@ static int ipx_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
ipxs->port)) { ipxs->port)) {
SOCK_DEBUG(sk, SOCK_DEBUG(sk,
"IPX: bind failed because port %X in use.\n", "IPX: bind failed because port %X in use.\n",
ntohs((int)addr->sipx_port)); ntohs(addr->sipx_port));
goto out_put; goto out_put;
} }
} else { } else {
@ -1488,7 +1495,7 @@ static int ipx_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
if (ipxitf_find_socket(intrfc, addr->sipx_port)) { if (ipxitf_find_socket(intrfc, addr->sipx_port)) {
SOCK_DEBUG(sk, SOCK_DEBUG(sk,
"IPX: bind failed because port %X in use.\n", "IPX: bind failed because port %X in use.\n",
ntohs((int)addr->sipx_port)); ntohs(addr->sipx_port));
goto out_put; goto out_put;
} }
} }
@ -1665,7 +1672,7 @@ static int ipx_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_ty
intrfc = ipxitf_find_using_phys(dev, pt->type); intrfc = ipxitf_find_using_phys(dev, pt->type);
if (!intrfc) { if (!intrfc) {
if (ipxcfg_auto_create_interfaces && if (ipxcfg_auto_create_interfaces &&
ntohl(IPX_SKB_CB(skb)->ipx_dest_net)) { IPX_SKB_CB(skb)->ipx_dest_net) {
intrfc = ipxitf_auto_create(dev, pt->type); intrfc = ipxitf_auto_create(dev, pt->type);
if (intrfc) if (intrfc)
ipxitf_hold(intrfc); ipxitf_hold(intrfc);

Просмотреть файл

@ -260,22 +260,22 @@ static int ipx_seq_socket_show(struct seq_file *seq, void *v)
ipxs = ipx_sk(s); ipxs = ipx_sk(s);
#ifdef CONFIG_IPX_INTERN #ifdef CONFIG_IPX_INTERN
seq_printf(seq, "%08lX:%02X%02X%02X%02X%02X%02X:%04X ", seq_printf(seq, "%08lX:%02X%02X%02X%02X%02X%02X:%04X ",
(unsigned long)htonl(ipxs->intrfc->if_netnum), (unsigned long)ntohl(ipxs->intrfc->if_netnum),
ipxs->node[0], ipxs->node[1], ipxs->node[2], ipxs->node[3], ipxs->node[0], ipxs->node[1], ipxs->node[2], ipxs->node[3],
ipxs->node[4], ipxs->node[5], htons(ipxs->port)); ipxs->node[4], ipxs->node[5], ntohs(ipxs->port));
#else #else
seq_printf(seq, "%08lX:%04X ", (unsigned long) htonl(ipxs->intrfc->if_netnum), seq_printf(seq, "%08lX:%04X ", (unsigned long) ntohl(ipxs->intrfc->if_netnum),
htons(ipxs->port)); ntohs(ipxs->port));
#endif /* CONFIG_IPX_INTERN */ #endif /* CONFIG_IPX_INTERN */
if (s->sk_state != TCP_ESTABLISHED) if (s->sk_state != TCP_ESTABLISHED)
seq_printf(seq, "%-28s", "Not_Connected"); seq_printf(seq, "%-28s", "Not_Connected");
else { else {
seq_printf(seq, "%08lX:%02X%02X%02X%02X%02X%02X:%04X ", seq_printf(seq, "%08lX:%02X%02X%02X%02X%02X%02X:%04X ",
(unsigned long)htonl(ipxs->dest_addr.net), (unsigned long)ntohl(ipxs->dest_addr.net),
ipxs->dest_addr.node[0], ipxs->dest_addr.node[1], ipxs->dest_addr.node[0], ipxs->dest_addr.node[1],
ipxs->dest_addr.node[2], ipxs->dest_addr.node[3], ipxs->dest_addr.node[2], ipxs->dest_addr.node[3],
ipxs->dest_addr.node[4], ipxs->dest_addr.node[5], ipxs->dest_addr.node[4], ipxs->dest_addr.node[5],
htons(ipxs->dest_addr.sock)); ntohs(ipxs->dest_addr.sock));
} }
seq_printf(seq, "%08X %08X %02X %03d\n", seq_printf(seq, "%08X %08X %02X %03d\n",

Просмотреть файл

@ -19,17 +19,17 @@ DEFINE_RWLOCK(ipx_routes_lock);
extern struct ipx_interface *ipx_internal_net; extern struct ipx_interface *ipx_internal_net;
extern __u16 ipx_cksum(struct ipxhdr *packet, int length); extern __be16 ipx_cksum(struct ipxhdr *packet, int length);
extern struct ipx_interface *ipxitf_find_using_net(__u32 net); extern struct ipx_interface *ipxitf_find_using_net(__be32 net);
extern int ipxitf_demux_socket(struct ipx_interface *intrfc, extern int ipxitf_demux_socket(struct ipx_interface *intrfc,
struct sk_buff *skb, int copy); struct sk_buff *skb, int copy);
extern int ipxitf_demux_socket(struct ipx_interface *intrfc, extern int ipxitf_demux_socket(struct ipx_interface *intrfc,
struct sk_buff *skb, int copy); struct sk_buff *skb, int copy);
extern int ipxitf_send(struct ipx_interface *intrfc, struct sk_buff *skb, extern int ipxitf_send(struct ipx_interface *intrfc, struct sk_buff *skb,
char *node); char *node);
extern struct ipx_interface *ipxitf_find_using_net(__u32 net); extern struct ipx_interface *ipxitf_find_using_net(__be32 net);
struct ipx_route *ipxrtr_lookup(__u32 net) struct ipx_route *ipxrtr_lookup(__be32 net)
{ {
struct ipx_route *r; struct ipx_route *r;
@ -48,7 +48,7 @@ unlock:
/* /*
* Caller must hold a reference to intrfc * Caller must hold a reference to intrfc
*/ */
int ipxrtr_add_route(__u32 network, struct ipx_interface *intrfc, int ipxrtr_add_route(__be32 network, struct ipx_interface *intrfc,
unsigned char *node) unsigned char *node)
{ {
struct ipx_route *rt; struct ipx_route *rt;
@ -118,7 +118,7 @@ out:
return rc; return rc;
} }
static int ipxrtr_delete(__u32 net) static int ipxrtr_delete(__be32 net)
{ {
struct ipx_route *r, *tmp; struct ipx_route *r, *tmp;
int rc; int rc;
@ -238,7 +238,7 @@ int ipxrtr_route_packet(struct sock *sk, struct sockaddr_ipx *usipx,
/* Apply checksum. Not allowed on 802.3 links. */ /* Apply checksum. Not allowed on 802.3 links. */
if (sk->sk_no_check || intrfc->if_dlink_type == htons(IPX_FRAME_8023)) if (sk->sk_no_check || intrfc->if_dlink_type == htons(IPX_FRAME_8023))
ipx->ipx_checksum = 0xFFFF; ipx->ipx_checksum = htons(0xFFFF);
else else
ipx->ipx_checksum = ipx_cksum(ipx, len + sizeof(struct ipxhdr)); ipx->ipx_checksum = ipx_cksum(ipx, len + sizeof(struct ipxhdr));

Просмотреть файл

@ -427,7 +427,7 @@ __build_packet_message(struct nfulnl_instance *inst,
nfmsg->version = NFNETLINK_V0; nfmsg->version = NFNETLINK_V0;
nfmsg->res_id = htons(inst->group_num); nfmsg->res_id = htons(inst->group_num);
pmsg.hw_protocol = htons(skb->protocol); pmsg.hw_protocol = skb->protocol;
pmsg.hook = hooknum; pmsg.hook = hooknum;
NFA_PUT(inst->skb, NFULA_PACKET_HDR, sizeof(pmsg), &pmsg); NFA_PUT(inst->skb, NFULA_PACKET_HDR, sizeof(pmsg), &pmsg);
@ -878,7 +878,7 @@ nfulnl_recv_config(struct sock *ctnl, struct sk_buff *skb,
params = NFA_DATA(nfula[NFULA_CFG_MODE-1]); params = NFA_DATA(nfula[NFULA_CFG_MODE-1]);
nfulnl_set_mode(inst, params->copy_mode, nfulnl_set_mode(inst, params->copy_mode,
ntohs(params->copy_range)); ntohl(params->copy_range));
} }
if (nfula[NFULA_CFG_TIMEOUT-1]) { if (nfula[NFULA_CFG_TIMEOUT-1]) {
@ -896,8 +896,8 @@ nfulnl_recv_config(struct sock *ctnl, struct sk_buff *skb,
} }
if (nfula[NFULA_CFG_QTHRESH-1]) { if (nfula[NFULA_CFG_QTHRESH-1]) {
u_int32_t qthresh = __be32 qthresh =
*(u_int16_t *)NFA_DATA(nfula[NFULA_CFG_QTHRESH-1]); *(__be32 *)NFA_DATA(nfula[NFULA_CFG_QTHRESH-1]);
nfulnl_set_qthresh(inst, ntohl(qthresh)); nfulnl_set_qthresh(inst, ntohl(qthresh));
} }

Просмотреть файл

@ -414,7 +414,7 @@ nfqnl_build_packet_message(struct nfqnl_instance *queue,
nfmsg->res_id = htons(queue->queue_num); nfmsg->res_id = htons(queue->queue_num);
pmsg.packet_id = htonl(entry->id); pmsg.packet_id = htonl(entry->id);
pmsg.hw_protocol = htons(entskb->protocol); pmsg.hw_protocol = entskb->protocol;
pmsg.hook = entinf->hook; pmsg.hook = entinf->hook;
NFA_PUT(skb, NFQA_PACKET_HDR, sizeof(pmsg), &pmsg); NFA_PUT(skb, NFQA_PACKET_HDR, sizeof(pmsg), &pmsg);

Просмотреть файл

@ -4,7 +4,7 @@
config NETLABEL config NETLABEL
bool "NetLabel subsystem support" bool "NetLabel subsystem support"
depends on NET && SECURITY depends on SECURITY
default n default n
---help--- ---help---
NetLabel provides support for explicit network packet labeling NetLabel provides support for explicit network packet labeling