Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c4ea94ab authored by Steven Whitehouse's avatar Steven Whitehouse Committed by David S. Miller
Browse files

[DECnet]: Endian annotation and fixes for DECnet.



The typedef for dn_address has been removed in favour of using __le16
or __u16 directly as appropriate. All the DECnet header files are
updated accordingly.

The byte ordering of dn_eth2dn() and dn_dn2eth() are both changed
since just about all their callers wanted network order rather than
host order, so the conversion is now done in the functions themselves.

Several missed endianess conversions have been picked up during the
conversion process. The nh_gw field in struct dn_fib_info has been
changed from a 32 bit field to 16 bits as it ought to be.

One or two cases of using htons rather than dn_htons in the routing
code have been found and fixed.

There are still a few warnings to fix, but this patch deals with the
important cases.

Signed-off-by: default avatarSteven Whitehouse <steve@chygwyn.com>
Signed-off-by: default avatarPatrick Caulfield <patrick@tykepenguin.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 2c7946a7
Loading
Loading
Loading
Loading
+22 −22
Original line number Original line Diff line number Diff line
@@ -71,17 +71,17 @@


struct dn_naddr 
struct dn_naddr 
{
{
	unsigned short		a_len;
	__le16		a_len;
	unsigned char a_addr[DN_MAXADDL];
	__u8 a_addr[DN_MAXADDL]; /* Two bytes little endian */
};
};


struct sockaddr_dn
struct sockaddr_dn
{
{
	unsigned short		sdn_family;
	__u16		sdn_family;
	unsigned char		sdn_flags;
	__u8		sdn_flags;
	unsigned char		sdn_objnum;
	__u8		sdn_objnum;
	unsigned short		sdn_objnamel;
	__le16		sdn_objnamel;
	unsigned char		sdn_objname[DN_MAXOBJL];
	__u8		sdn_objname[DN_MAXOBJL];
	struct   dn_naddr	sdn_add;
	struct   dn_naddr	sdn_add;
};
};
#define sdn_nodeaddrl   sdn_add.a_len   /* Node address length  */
#define sdn_nodeaddrl   sdn_add.a_len   /* Node address length  */
@@ -93,38 +93,38 @@ struct sockaddr_dn
 * DECnet set/get DSO_CONDATA, DSO_DISDATA (optional data) structure
 * DECnet set/get DSO_CONDATA, DSO_DISDATA (optional data) structure
 */
 */
struct optdata_dn {
struct optdata_dn {
        unsigned short  opt_status;     /* Extended status return */
        __le16  opt_status;     /* Extended status return */
#define opt_sts opt_status
#define opt_sts opt_status
        unsigned short  opt_optl;       /* Length of user data    */
        __le16  opt_optl;       /* Length of user data    */
        unsigned char   opt_data[16];   /* User data              */
        __u8   opt_data[16];   /* User data              */
};
};


struct accessdata_dn
struct accessdata_dn
{
{
	unsigned char		acc_accl;
	__u8		acc_accl;
	unsigned char		acc_acc[DN_MAXACCL];
	__u8		acc_acc[DN_MAXACCL];
	unsigned char 		acc_passl;
	__u8 		acc_passl;
	unsigned char		acc_pass[DN_MAXACCL];
	__u8		acc_pass[DN_MAXACCL];
	unsigned char 		acc_userl;
	__u8 		acc_userl;
	unsigned char		acc_user[DN_MAXACCL];
	__u8		acc_user[DN_MAXACCL];
};
};


/*
/*
 * DECnet logical link information structure
 * DECnet logical link information structure
 */
 */
struct linkinfo_dn {
struct linkinfo_dn {
        unsigned short  idn_segsize;    /* Segment size for link */
        __le16  idn_segsize;    /* Segment size for link */
        unsigned char   idn_linkstate;  /* Logical link state    */
        __u8   idn_linkstate;  /* Logical link state    */
};
};


/*
/*
 * Ethernet address format (for DECnet)
 * Ethernet address format (for DECnet)
 */
 */
union etheraddress {
union etheraddress {
        unsigned char dne_addr[6];             /* Full ethernet address */
        __u8 dne_addr[6];             /* Full ethernet address */
  struct {
  struct {
                unsigned char dne_hiord[4];    /* DECnet HIORD prefix   */
                __u8 dne_hiord[4];    /* DECnet HIORD prefix   */
                unsigned char dne_nodeaddr[2]; /* DECnet node address   */
                __u8 dne_nodeaddr[2]; /* DECnet node address   */
  } dne_remote;
  } dne_remote;
};
};


@@ -133,7 +133,7 @@ union etheraddress {
 * DECnet physical socket address format
 * DECnet physical socket address format
 */
 */
struct dn_addr {
struct dn_addr {
        unsigned short dna_family;      /* AF_DECnet               */
        __le16 dna_family;      /* AF_DECnet               */
        union etheraddress dna_netaddr; /* DECnet ethernet address */
        union etheraddress dna_netaddr; /* DECnet ethernet address */
};
};


+52 −53
Original line number Original line Diff line number Diff line
@@ -6,10 +6,8 @@
#include <net/tcp.h>
#include <net/tcp.h>
#include <asm/byteorder.h>
#include <asm/byteorder.h>


typedef unsigned short dn_address;
#define dn_ntohs(x) le16_to_cpu(x)

#define dn_htons(x) cpu_to_le16(x)
#define dn_ntohs(x) le16_to_cpu((unsigned short)(x))
#define dn_htons(x) cpu_to_le16((unsigned short)(x))


struct dn_scp                                   /* Session Control Port */
struct dn_scp                                   /* Session Control Port */
{
{
@@ -31,36 +29,36 @@ struct dn_scp /* Session Control Port */
#define DN_CL    15                     /* Closed               */
#define DN_CL    15                     /* Closed               */
#define DN_CN    16                     /* Closed Notification  */
#define DN_CN    16                     /* Closed Notification  */


        unsigned short          addrloc;
        __le16          addrloc;
        unsigned short          addrrem;
        __le16          addrrem;
        unsigned short          numdat;
        __u16          numdat;
        unsigned short          numoth;
        __u16          numoth;
        unsigned short          numoth_rcv;
        __u16          numoth_rcv;
        unsigned short          numdat_rcv;
        __u16          numdat_rcv;
        unsigned short          ackxmt_dat;
        __u16          ackxmt_dat;
        unsigned short          ackxmt_oth;
        __u16          ackxmt_oth;
        unsigned short          ackrcv_dat;
        __u16          ackrcv_dat;
        unsigned short          ackrcv_oth;
        __u16          ackrcv_oth;
        unsigned char           flowrem_sw;
        __u8           flowrem_sw;
	unsigned char		flowloc_sw;
	__u8           flowloc_sw;
#define DN_SEND         2
#define DN_SEND         2
#define DN_DONTSEND     1
#define DN_DONTSEND     1
#define DN_NOCHANGE     0
#define DN_NOCHANGE     0
	unsigned short		flowrem_dat;
	__u16		flowrem_dat;
	unsigned short		flowrem_oth;
	__u16		flowrem_oth;
	unsigned short		flowloc_dat;
	__u16		flowloc_dat;
	unsigned short		flowloc_oth;
	__u16		flowloc_oth;
	unsigned char		services_rem;
	__u8		services_rem;
	unsigned char		services_loc;
	__u8		services_loc;
	unsigned char		info_rem;
	__u8		info_rem;
	unsigned char		info_loc;
	__u8		info_loc;


	unsigned short		segsize_rem;
	__u16		segsize_rem;
	unsigned short		segsize_loc;
	__u16		segsize_loc;


	unsigned char		nonagle;
	__u8		nonagle;
	unsigned char		multi_ireq;
	__u8		multi_ireq;
	unsigned char		accept_mode;
	__u8		accept_mode;
	unsigned long		seg_total; /* Running total of current segment */
	unsigned long		seg_total; /* Running total of current segment */


	struct optdata_dn     conndata_in;
	struct optdata_dn     conndata_in;
@@ -160,40 +158,41 @@ static inline struct dn_scp *DN_SK(struct sock *sk)
 */
 */
#define DN_SKB_CB(skb) ((struct dn_skb_cb *)(skb)->cb)
#define DN_SKB_CB(skb) ((struct dn_skb_cb *)(skb)->cb)
struct dn_skb_cb {
struct dn_skb_cb {
	unsigned short dst;
	__le16 dst;
	unsigned short src;
	__le16 src;
	unsigned short hops;
	__u16 hops;
	unsigned short dst_port;
	__le16 dst_port;
	unsigned short src_port;
	__le16 src_port;
	unsigned char services;
	__u8 services;
	unsigned char info;
	__u8 info;
	unsigned char rt_flags;
	__u8 rt_flags;
	unsigned char nsp_flags;
	__u8 nsp_flags;
	unsigned short segsize;
	__u16 segsize;
	unsigned short segnum;
	__u16 segnum;
	unsigned short xmit_count;
	__u16 xmit_count;
	unsigned long stamp;
	unsigned long stamp;
	int iif;
	int iif;
};
};


static inline dn_address dn_eth2dn(unsigned char *ethaddr)
static inline __le16 dn_eth2dn(unsigned char *ethaddr)
{
{
	return ethaddr[4] | (ethaddr[5] << 8);
	return dn_htons(ethaddr[4] | (ethaddr[5] << 8));
}
}


static inline dn_address dn_saddr2dn(struct sockaddr_dn *saddr)
static inline __le16 dn_saddr2dn(struct sockaddr_dn *saddr)
{
{
	return *(dn_address *)saddr->sdn_nodeaddr;
	return *(__le16 *)saddr->sdn_nodeaddr;
}
}


static inline void dn_dn2eth(unsigned char *ethaddr, dn_address addr)
static inline void dn_dn2eth(unsigned char *ethaddr, __le16 addr)
{
{
	__u16 a = dn_ntohs(addr);
	ethaddr[0] = 0xAA;
	ethaddr[0] = 0xAA;
	ethaddr[1] = 0x00;
	ethaddr[1] = 0x00;
	ethaddr[2] = 0x04;
	ethaddr[2] = 0x04;
	ethaddr[3] = 0x00;
	ethaddr[3] = 0x00;
	ethaddr[4] = (unsigned char)(addr & 0xff);
	ethaddr[4] = (__u8)(a & 0xff);
	ethaddr[5] = (unsigned char)(addr >> 8);
	ethaddr[5] = (__u8)(a >> 8);
}
}


static inline void dn_sk_ports_copy(struct flowi *fl, struct dn_scp *scp)
static inline void dn_sk_ports_copy(struct flowi *fl, struct dn_scp *scp)
@@ -202,7 +201,7 @@ static inline void dn_sk_ports_copy(struct flowi *fl, struct dn_scp *scp)
	fl->uli_u.dnports.dport = scp->addrrem;
	fl->uli_u.dnports.dport = scp->addrrem;
	fl->uli_u.dnports.objnum = scp->addr.sdn_objnum;
	fl->uli_u.dnports.objnum = scp->addr.sdn_objnum;
	if (fl->uli_u.dnports.objnum == 0) {
	if (fl->uli_u.dnports.objnum == 0) {
		fl->uli_u.dnports.objnamel = scp->addr.sdn_objnamel;
		fl->uli_u.dnports.objnamel = (__u8)dn_ntohs(scp->addr.sdn_objnamel);
		memcpy(fl->uli_u.dnports.objname, scp->addr.sdn_objname, 16);
		memcpy(fl->uli_u.dnports.objname, scp->addr.sdn_objname, 16);
	}
	}
}
}
@@ -217,7 +216,7 @@ extern unsigned dn_mss_from_pmtu(struct net_device *dev, int mtu);
extern struct sock *dn_sklist_find_listener(struct sockaddr_dn *addr);
extern struct sock *dn_sklist_find_listener(struct sockaddr_dn *addr);
extern struct sock *dn_find_by_skb(struct sk_buff *skb);
extern struct sock *dn_find_by_skb(struct sk_buff *skb);
#define DN_ASCBUF_LEN 9
#define DN_ASCBUF_LEN 9
extern char *dn_addr2asc(dn_address, char *);
extern char *dn_addr2asc(__u16, char *);
extern int dn_destroy_timer(struct sock *sk);
extern int dn_destroy_timer(struct sock *sk);


extern int dn_sockaddr2username(struct sockaddr_dn *addr, unsigned char *buf, unsigned char type);
extern int dn_sockaddr2username(struct sockaddr_dn *addr, unsigned char *buf, unsigned char type);
@@ -226,7 +225,7 @@ extern int dn_username2sockaddr(unsigned char *data, int len, struct sockaddr_dn
extern void dn_start_slow_timer(struct sock *sk);
extern void dn_start_slow_timer(struct sock *sk);
extern void dn_stop_slow_timer(struct sock *sk);
extern void dn_stop_slow_timer(struct sock *sk);


extern dn_address decnet_address;
extern __le16 decnet_address;
extern int decnet_debug_level;
extern int decnet_debug_level;
extern int decnet_time_wait;
extern int decnet_time_wait;
extern int decnet_dn_count;
extern int decnet_dn_count;
+44 −44
Original line number Original line Diff line number Diff line
@@ -7,10 +7,10 @@ struct dn_dev;
struct dn_ifaddr {
struct dn_ifaddr {
	struct dn_ifaddr *ifa_next;
	struct dn_ifaddr *ifa_next;
	struct dn_dev    *ifa_dev;
	struct dn_dev    *ifa_dev;
	dn_address       ifa_local;
	__le16            ifa_local;
	dn_address       ifa_address;
	__le16            ifa_address;
	unsigned char    ifa_flags;
	__u8              ifa_flags;
	unsigned char    ifa_scope;
	__u8              ifa_scope;
	char              ifa_label[IFNAMSIZ];
	char              ifa_label[IFNAMSIZ];
};
};


@@ -91,7 +91,7 @@ struct dn_dev {
	struct timer_list timer;
	struct timer_list timer;
	unsigned long t3;
	unsigned long t3;
	struct neigh_parms *neigh_parms;
	struct neigh_parms *neigh_parms;
	unsigned char addr[ETH_ALEN];
	__u8 addr[ETH_ALEN];
	struct neighbour *router; /* Default router on circuit */
	struct neighbour *router; /* Default router on circuit */
	struct neighbour *peer;   /* Peer on pointopoint links */
	struct neighbour *peer;   /* Peer on pointopoint links */
	unsigned long uptime;     /* Time device went up in jiffies */
	unsigned long uptime;     /* Time device went up in jiffies */
@@ -99,56 +99,56 @@ struct dn_dev {


struct dn_short_packet
struct dn_short_packet
{
{
	unsigned char   msgflg;
	__u8    msgflg;
	unsigned short  dstnode;
	__le16 dstnode;
	unsigned short  srcnode;
	__le16 srcnode;
	unsigned char   forward;
	__u8   forward;
} __attribute__((packed));
} __attribute__((packed));


struct dn_long_packet
struct dn_long_packet
{
{
	unsigned char   msgflg;
	__u8   msgflg;
	unsigned char   d_area;
	__u8   d_area;
	unsigned char   d_subarea;
	__u8   d_subarea;
	unsigned char   d_id[6];
	__u8   d_id[6];
	unsigned char   s_area;
	__u8   s_area;
	unsigned char   s_subarea;
	__u8   s_subarea;
	unsigned char   s_id[6];
	__u8   s_id[6];
	unsigned char   nl2;
	__u8   nl2;
	unsigned char   visit_ct;
	__u8   visit_ct;
	unsigned char   s_class;
	__u8   s_class;
	unsigned char   pt;
	__u8   pt;
} __attribute__((packed));
} __attribute__((packed));


/*------------------------- DRP - Routing messages ---------------------*/
/*------------------------- DRP - Routing messages ---------------------*/


struct endnode_hello_message
struct endnode_hello_message
{
{
	unsigned char   msgflg;
	__u8   msgflg;
	unsigned char   tiver[3];
	__u8   tiver[3];
	unsigned char   id[6];
	__u8   id[6];
	unsigned char   iinfo;
	__u8   iinfo;
	unsigned short  blksize;
	__le16 blksize;
	unsigned char   area;
	__u8   area;
	unsigned char   seed[8];
	__u8   seed[8];
	unsigned char   neighbor[6];
	__u8   neighbor[6];
	unsigned short  timer;
	__le16 timer;
	unsigned char   mpd;
	__u8   mpd;
	unsigned char   datalen;
	__u8   datalen;
	unsigned char   data[2];
	__u8   data[2];
} __attribute__((packed));
} __attribute__((packed));


struct rtnode_hello_message
struct rtnode_hello_message
{
{
	unsigned char   msgflg;
	__u8   msgflg;
	unsigned char   tiver[3];
	__u8   tiver[3];
	unsigned char   id[6];
	__u8   id[6];
	unsigned char   iinfo;
	__u8   iinfo;
	unsigned short  blksize;
	__le16  blksize;
	unsigned char   priority;
	__u8   priority;
	unsigned char   area;
	__u8   area;
	unsigned short  timer;
	__le16  timer;
	unsigned char   mpd;
	__u8   mpd;
} __attribute__((packed));
} __attribute__((packed));




@@ -169,12 +169,12 @@ extern void dn_dev_down(struct net_device *);


extern int dn_dev_set_default(struct net_device *dev, int force);
extern int dn_dev_set_default(struct net_device *dev, int force);
extern struct net_device *dn_dev_get_default(void);
extern struct net_device *dn_dev_get_default(void);
extern int dn_dev_bind_default(dn_address *addr);
extern int dn_dev_bind_default(__le16 *addr);


extern int register_dnaddr_notifier(struct notifier_block *nb);
extern int register_dnaddr_notifier(struct notifier_block *nb);
extern int unregister_dnaddr_notifier(struct notifier_block *nb);
extern int unregister_dnaddr_notifier(struct notifier_block *nb);


static inline int dn_dev_islocal(struct net_device *dev, dn_address addr)
static inline int dn_dev_islocal(struct net_device *dev, __le16 addr)
{
{
	struct dn_dev *dn_db = dev->dn_ptr;
	struct dn_dev *dn_db = dev->dn_ptr;
	struct dn_ifaddr *ifa;
	struct dn_ifaddr *ifa;
+11 −11
Original line number Original line Diff line number Diff line
@@ -37,7 +37,7 @@ struct dn_fib_nh {
	int			nh_weight;
	int			nh_weight;
	int			nh_power;
	int			nh_power;
	int			nh_oif;
	int			nh_oif;
	u32			nh_gw;
	__le16			nh_gw;
};
};


struct dn_fib_info {
struct dn_fib_info {
@@ -48,7 +48,7 @@ struct dn_fib_info {
	int			fib_dead;
	int			fib_dead;
	unsigned		fib_flags;
	unsigned		fib_flags;
	int			fib_protocol;
	int			fib_protocol;
	dn_address		fib_prefsrc;
	__le16			fib_prefsrc;
	__u32			fib_priority;
	__u32			fib_priority;
	__u32			fib_metrics[RTAX_MAX];
	__u32			fib_metrics[RTAX_MAX];
#define dn_fib_mtu  fib_metrics[RTAX_MTU-1]
#define dn_fib_mtu  fib_metrics[RTAX_MTU-1]
@@ -71,15 +71,15 @@ struct dn_fib_info {
#define DN_FIB_RES_OIF(res)	(DN_FIB_RES_NH(res).nh_oif)
#define DN_FIB_RES_OIF(res)	(DN_FIB_RES_NH(res).nh_oif)


typedef struct {
typedef struct {
	u16	datum;
	__le16	datum;
} dn_fib_key_t;
} dn_fib_key_t;


typedef struct {
typedef struct {
	u16	datum;
	__le16	datum;
} dn_fib_hash_t;
} dn_fib_hash_t;


typedef struct {
typedef struct {
	u16	datum;
	__u16	datum;
} dn_fib_idx_t;
} dn_fib_idx_t;


struct dn_fib_node {
struct dn_fib_node {
@@ -126,11 +126,11 @@ extern int dn_fib_semantic_match(int type, struct dn_fib_info *fi,
			const struct flowi *fl,
			const struct flowi *fl,
			struct dn_fib_res *res);
			struct dn_fib_res *res);
extern void dn_fib_release_info(struct dn_fib_info *fi);
extern void dn_fib_release_info(struct dn_fib_info *fi);
extern u16 dn_fib_get_attr16(struct rtattr *attr, int attrlen, int type);
extern __le16 dn_fib_get_attr16(struct rtattr *attr, int attrlen, int type);
extern void dn_fib_flush(void);
extern void dn_fib_flush(void);
extern void dn_fib_select_multipath(const struct flowi *fl,
extern void dn_fib_select_multipath(const struct flowi *fl,
					struct dn_fib_res *res);
					struct dn_fib_res *res);
extern int dn_fib_sync_down(dn_address local, struct net_device *dev, 
extern int dn_fib_sync_down(__le16 local, struct net_device *dev,
				int force);
				int force);
extern int dn_fib_sync_up(struct net_device *dev);
extern int dn_fib_sync_up(struct net_device *dev);


@@ -148,8 +148,8 @@ extern void dn_fib_table_cleanup(void);
extern void dn_fib_rules_init(void);
extern void dn_fib_rules_init(void);
extern void dn_fib_rules_cleanup(void);
extern void dn_fib_rules_cleanup(void);
extern void dn_fib_rule_put(struct dn_fib_rule *);
extern void dn_fib_rule_put(struct dn_fib_rule *);
extern __u16 dn_fib_rules_policy(__u16 saddr, struct dn_fib_res *res, unsigned *flags);
extern __le16 dn_fib_rules_policy(__le16 saddr, struct dn_fib_res *res, unsigned *flags);
extern unsigned dnet_addr_type(__u16 addr);
extern unsigned dnet_addr_type(__le16 addr);
extern int dn_fib_lookup(const struct flowi *fl, struct dn_fib_res *res);
extern int dn_fib_lookup(const struct flowi *fl, struct dn_fib_res *res);


/*
/*
@@ -194,10 +194,10 @@ extern struct dn_fib_table *dn_fib_tables[];


#endif /* CONFIG_DECNET_ROUTER */
#endif /* CONFIG_DECNET_ROUTER */


static inline u16 dnet_make_mask(int n)
static inline __le16 dnet_make_mask(int n)
{
{
        if (n)
        if (n)
                return htons(~((1<<(16-n))-1));
                return dn_htons(~((1<<(16-n))-1));
        return 0;
        return 0;
}
}


+2 −2
Original line number Original line Diff line number Diff line
@@ -7,13 +7,13 @@
 */
 */
struct dn_neigh {
struct dn_neigh {
        struct neighbour n;
        struct neighbour n;
	dn_address addr;
	__le16 addr;
        unsigned long flags;
        unsigned long flags;
#define DN_NDFLAG_R1    0x0001 /* Router L1      */
#define DN_NDFLAG_R1    0x0001 /* Router L1      */
#define DN_NDFLAG_R2    0x0002 /* Router L2      */
#define DN_NDFLAG_R2    0x0002 /* Router L2      */
#define DN_NDFLAG_P3    0x0004 /* Phase III Node */
#define DN_NDFLAG_P3    0x0004 /* Phase III Node */
        unsigned long blksize;
        unsigned long blksize;
	unsigned char priority;
	__u8 priority;
};
};


extern void dn_neigh_init(void);
extern void dn_neigh_init(void);
Loading