Skip to content

Commit

Permalink
[DECnet]: Endian annotation and fixes for DECnet.
Browse files Browse the repository at this point in the history
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: Steven Whitehouse <steve@chygwyn.com>
Signed-off-by: Patrick Caulfield <patrick@tykepenguin.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Steven Whitehouse authored and David S. Miller committed Mar 21, 2006
1 parent 2c7946a commit c4ea94a
Show file tree
Hide file tree
Showing 18 changed files with 302 additions and 300 deletions.
44 changes: 22 additions & 22 deletions include/linux/dn.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,17 +71,17 @@

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

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

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

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

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

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

Expand Down
105 changes: 52 additions & 53 deletions include/net/dn.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,8 @@
#include <net/tcp.h>
#include <asm/byteorder.h>

typedef unsigned short dn_address;

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

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

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

unsigned short segsize_rem;
unsigned short segsize_loc;

unsigned char nonagle;
unsigned char multi_ireq;
unsigned char accept_mode;
__u16 flowrem_dat;
__u16 flowrem_oth;
__u16 flowloc_dat;
__u16 flowloc_oth;
__u8 services_rem;
__u8 services_loc;
__u8 info_rem;
__u8 info_loc;

__u16 segsize_rem;
__u16 segsize_loc;

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

struct optdata_dn conndata_in;
Expand Down Expand Up @@ -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)
struct dn_skb_cb {
unsigned short dst;
unsigned short src;
unsigned short hops;
unsigned short dst_port;
unsigned short src_port;
unsigned char services;
unsigned char info;
unsigned char rt_flags;
unsigned char nsp_flags;
unsigned short segsize;
unsigned short segnum;
unsigned short xmit_count;
__le16 dst;
__le16 src;
__u16 hops;
__le16 dst_port;
__le16 src_port;
__u8 services;
__u8 info;
__u8 rt_flags;
__u8 nsp_flags;
__u16 segsize;
__u16 segnum;
__u16 xmit_count;
unsigned long stamp;
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[1] = 0x00;
ethaddr[2] = 0x04;
ethaddr[3] = 0x00;
ethaddr[4] = (unsigned char)(addr & 0xff);
ethaddr[5] = (unsigned char)(addr >> 8);
ethaddr[4] = (__u8)(a & 0xff);
ethaddr[5] = (__u8)(a >> 8);
}

static inline void dn_sk_ports_copy(struct flowi *fl, struct dn_scp *scp)
Expand All @@ -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.objnum = scp->addr.sdn_objnum;
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);
}
}
Expand All @@ -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_find_by_skb(struct sk_buff *skb);
#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_sockaddr2username(struct sockaddr_dn *addr, unsigned char *buf, unsigned char type);
Expand All @@ -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_stop_slow_timer(struct sock *sk);

extern dn_address decnet_address;
extern __le16 decnet_address;
extern int decnet_debug_level;
extern int decnet_time_wait;
extern int decnet_dn_count;
Expand Down
88 changes: 44 additions & 44 deletions include/net/dn_dev.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ struct dn_dev;
struct dn_ifaddr {
struct dn_ifaddr *ifa_next;
struct dn_dev *ifa_dev;
dn_address ifa_local;
dn_address ifa_address;
unsigned char ifa_flags;
unsigned char ifa_scope;
char ifa_label[IFNAMSIZ];
__le16 ifa_local;
__le16 ifa_address;
__u8 ifa_flags;
__u8 ifa_scope;
char ifa_label[IFNAMSIZ];
};

#define DN_DEV_S_RU 0 /* Run - working normally */
Expand Down Expand Up @@ -91,64 +91,64 @@ struct dn_dev {
struct timer_list timer;
unsigned long t3;
struct neigh_parms *neigh_parms;
unsigned char addr[ETH_ALEN];
__u8 addr[ETH_ALEN];
struct neighbour *router; /* Default router on circuit */
struct neighbour *peer; /* Peer on pointopoint links */
unsigned long uptime; /* Time device went up in jiffies */
};

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

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

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

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

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


Expand All @@ -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 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 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_ifaddr *ifa;
Expand Down
Loading

0 comments on commit c4ea94a

Please sign in to comment.