Blame view

include/net/dn_route.h 3.96 KB
fd9871f70   Thomas Gleixner   treewide: Replace...
1
  /* SPDX-License-Identifier: GPL-2.0-or-later */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2
3
4
5
6
7
  #ifndef _NET_DN_ROUTE_H
  #define _NET_DN_ROUTE_H
  
  /******************************************************************************
      (c) 1995-1998 E.M. Serrat		emserrat@geocities.com
      
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
8
  *******************************************************************************/
59ddd965c   Joe Perches   decnet (dn*.h): R...
9
10
11
12
13
  struct sk_buff *dn_alloc_skb(struct sock *sk, int size, gfp_t pri);
  int dn_route_output_sock(struct dst_entry __rcu **pprt, struct flowidn *,
  			 struct sock *sk, int flags);
  int dn_cache_dump(struct sk_buff *skb, struct netlink_callback *cb);
  void dn_rt_cache_flush(int delay);
f56b8bf6e   Rashika Kheria   net: Move prototy...
14
15
  int dn_route_rcv(struct sk_buff *skb, struct net_device *dev,
  		 struct packet_type *pt, struct net_device *orig_dev);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
  
  /* Masks for flags field */
  #define DN_RT_F_PID 0x07 /* Mask for packet type                      */
  #define DN_RT_F_PF  0x80 /* Padding Follows                           */
  #define DN_RT_F_VER 0x40 /* Version =0 discard packet if ==1          */
  #define DN_RT_F_IE  0x20 /* Intra Ethernet, Reserved in short pkt     */
  #define DN_RT_F_RTS 0x10 /* Packet is being returned to sender        */
  #define DN_RT_F_RQR 0x08 /* Return packet to sender upon non-delivery */
  
  /* Mask for types of routing packets */
  #define DN_RT_PKT_MSK   0x06
  /* Types of routing packets */
  #define DN_RT_PKT_SHORT 0x02 /* Short routing packet */
  #define DN_RT_PKT_LONG  0x06 /* Long routing packet  */
  
  /* Mask for control/routing selection */
  #define DN_RT_PKT_CNTL  0x01 /* Set to 1 if a control packet  */
  /* Types of control packets */
  #define DN_RT_CNTL_MSK  0x0f /* Mask for control packets      */
  #define DN_RT_PKT_INIT  0x01 /* Initialisation packet         */
  #define DN_RT_PKT_VERI  0x03 /* Verification Message          */
  #define DN_RT_PKT_HELO  0x05 /* Hello and Test Message        */
  #define DN_RT_PKT_L1RT  0x07 /* Level 1 Routing Message       */
  #define DN_RT_PKT_L2RT  0x09 /* Level 2 Routing Message       */
  #define DN_RT_PKT_ERTH  0x0b /* Ethernet Router Hello         */
  #define DN_RT_PKT_EEDH  0x0d /* Ethernet EndNode Hello        */
  
  /* Values for info field in hello message */
  #define DN_RT_INFO_TYPE 0x03 /* Type mask                     */
  #define DN_RT_INFO_L1RT 0x02 /* L1 Router                     */
  #define DN_RT_INFO_L2RT 0x01 /* L2 Router                     */
  #define DN_RT_INFO_ENDN 0x03 /* EndNode                       */
  #define DN_RT_INFO_VERI 0x04 /* Verification Reqd.            */
  #define DN_RT_INFO_RJCT 0x08 /* Reject Flag, Reserved         */
  #define DN_RT_INFO_VFLD 0x10 /* Verification Failed, Reserved */
  #define DN_RT_INFO_NOML 0x20 /* No Multicast traffic accepted */
  #define DN_RT_INFO_BLKR 0x40 /* Blocking Requested            */
  
  /*
   * The fl structure is what we used to look up the route.
   * The rt_saddr & rt_daddr entries are the same as key.saddr & key.daddr
   * except for local input routes, where the rt_saddr = fl.fld_dst and
   * rt_daddr = fl.fld_src to allow the route to be used for returning
   * packets to the originating host.
   */
  struct dn_route {
d8d1f30b9   Changli Gao   net-next: remove ...
62
  	struct dst_entry dst;
fe736e778   David Miller   decnet: Move dn_n...
63
  	struct dn_route __rcu *dn_next;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
64

fccd7d5c7   David S. Miller   decnet: Use neigh...
65
  	struct neighbour *n;
bef55aebd   David S. Miller   decnet: Convert t...
66
  	struct flowidn fld;
0c195c3fc   Eric Dumazet   [DECNET]: Convert...
67

c4ea94ab3   Steven Whitehouse   [DECnet]: Endian ...
68
69
70
71
72
73
  	__le16 rt_saddr;
  	__le16 rt_daddr;
  	__le16 rt_gateway;
  	__le16 rt_local_src;	/* Source used for forwarding packets */
  	__le16 rt_src_map;
  	__le16 rt_dst_map;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
74

95c961747   Eric Dumazet   net: cleanup unsi...
75
76
  	unsigned int rt_flags;
  	unsigned int rt_type;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
77
  };
c75379676   David S. Miller   ipv4: Make rt->fl...
78
79
  static inline bool dn_is_input_route(struct dn_route *rt)
  {
bef55aebd   David S. Miller   decnet: Convert t...
80
  	return rt->fld.flowidn_iif != 0;
c75379676   David S. Miller   ipv4: Make rt->fl...
81
82
83
84
  }
  
  static inline bool dn_is_output_route(struct dn_route *rt)
  {
bef55aebd   David S. Miller   decnet: Convert t...
85
  	return rt->fld.flowidn_iif == 0;
c75379676   David S. Miller   ipv4: Make rt->fl...
86
  }
59ddd965c   Joe Perches   decnet (dn*.h): R...
87
88
  void dn_route_init(void);
  void dn_route_cleanup(void);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
  
  #include <net/sock.h>
  #include <linux/if_arp.h>
  
  static inline void dn_rt_send(struct sk_buff *skb)
  {
  	dev_queue_xmit(skb);
  }
  
  static inline void dn_rt_finish_output(struct sk_buff *skb, char *dst, char *src)
  {
  	struct net_device *dev = skb->dev;
  
  	if ((dev->type != ARPHRD_ETHER) && (dev->type != ARPHRD_LOOPBACK))
  		dst = NULL;
0c4e85813   Stephen Hemminger   [NET]: Wrap netde...
104
  	if (dev_hard_header(skb, dev, ETH_P_DNA_RT, dst, src, skb->len) >= 0)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
105
106
107
108
109
110
  		dn_rt_send(skb);
  	else
  		kfree_skb(skb);
  }
  
  #endif /* _NET_DN_ROUTE_H */