Blame view

include/net/dn_fib.h 3.98 KB
b24413180   Greg Kroah-Hartman   License cleanup: ...
1
  /* SPDX-License-Identifier: GPL-2.0 */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2
3
  #ifndef _NET_DN_FIB_H
  #define _NET_DN_FIB_H
58d7d8f9b   Thomas Graf   decnet: Parse net...
4
  #include <linux/netlink.h>
e0542dd51   Reshetova, Elena   net, decnet: conv...
5
  #include <linux/refcount.h>
58d7d8f9b   Thomas Graf   decnet: Parse net...
6
7
  
  extern const struct nla_policy rtm_dn_policy[];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
8
9
  
  struct dn_fib_res {
a8731cbf6   Steven Whitehouse   [DECNET]: Covert ...
10
  	struct fib_rule *r;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
11
12
13
14
15
16
17
18
19
  	struct dn_fib_info *fi;
  	unsigned char prefixlen;
  	unsigned char nh_sel;
  	unsigned char type;
  	unsigned char scope;
  };
  
  struct dn_fib_nh {
  	struct net_device	*nh_dev;
95c961747   Eric Dumazet   net: cleanup unsi...
20
  	unsigned int		nh_flags;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
21
22
23
24
  	unsigned char		nh_scope;
  	int			nh_weight;
  	int			nh_power;
  	int			nh_oif;
c4ea94ab3   Steven Whitehouse   [DECnet]: Endian ...
25
  	__le16			nh_gw;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
26
27
28
29
30
31
  };
  
  struct dn_fib_info {
  	struct dn_fib_info	*fib_next;
  	struct dn_fib_info	*fib_prev;
  	int 			fib_treeref;
e0542dd51   Reshetova, Elena   net, decnet: conv...
32
  	refcount_t		fib_clntref;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
33
  	int			fib_dead;
95c961747   Eric Dumazet   net: cleanup unsi...
34
  	unsigned int		fib_flags;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
35
  	int			fib_protocol;
c4ea94ab3   Steven Whitehouse   [DECnet]: Endian ...
36
  	__le16			fib_prefsrc;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
37
38
  	__u32			fib_priority;
  	__u32			fib_metrics[RTAX_MAX];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
  	int			fib_nhs;
  	int			fib_power;
  	struct dn_fib_nh	fib_nh[0];
  #define dn_fib_dev		fib_nh[0].nh_dev
  };
  
  
  #define DN_FIB_RES_RESET(res)	((res).nh_sel = 0)
  #define DN_FIB_RES_NH(res)	((res).fi->fib_nh[(res).nh_sel])
  
  #define DN_FIB_RES_PREFSRC(res)	((res).fi->fib_prefsrc ? : __dn_fib_res_prefsrc(&res))
  #define DN_FIB_RES_GW(res)	(DN_FIB_RES_NH(res).nh_gw)
  #define DN_FIB_RES_DEV(res)	(DN_FIB_RES_NH(res).nh_dev)
  #define DN_FIB_RES_OIF(res)	(DN_FIB_RES_NH(res).nh_oif)
  
  typedef struct {
c4ea94ab3   Steven Whitehouse   [DECnet]: Endian ...
55
  	__le16	datum;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
56
57
58
  } dn_fib_key_t;
  
  typedef struct {
c4ea94ab3   Steven Whitehouse   [DECnet]: Endian ...
59
  	__le16	datum;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
60
61
62
  } dn_fib_hash_t;
  
  typedef struct {
c4ea94ab3   Steven Whitehouse   [DECnet]: Endian ...
63
  	__u16	datum;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
64
65
66
67
68
69
70
71
72
73
74
75
76
77
  } dn_fib_idx_t;
  
  struct dn_fib_node {
  	struct dn_fib_node *fn_next;
  	struct dn_fib_info *fn_info;
  #define DN_FIB_INFO(f) ((f)->fn_info)
  	dn_fib_key_t	fn_key;
  	u8		fn_type;
  	u8		fn_scope;
  	u8		fn_state;
  };
  
  
  struct dn_fib_table {
abcab2683   Patrick McHardy   [DECNET]: Increas...
78
  	struct hlist_node hlist;
2dfe55b47   Patrick McHardy   [NET]: Use u32 fo...
79
  	u32 n;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
80
81
  
  	int (*insert)(struct dn_fib_table *t, struct rtmsg *r, 
58d7d8f9b   Thomas Graf   decnet: Parse net...
82
  			struct nlattr *attrs[], struct nlmsghdr *n,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
83
84
  			struct netlink_skb_parms *req);
  	int (*delete)(struct dn_fib_table *t, struct rtmsg *r,
58d7d8f9b   Thomas Graf   decnet: Parse net...
85
  			struct nlattr *attrs[], struct nlmsghdr *n,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
86
  			struct netlink_skb_parms *req);
bef55aebd   David S. Miller   decnet: Convert t...
87
  	int (*lookup)(struct dn_fib_table *t, const struct flowidn *fld,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
88
89
90
91
92
93
94
95
96
97
98
  			struct dn_fib_res *res);
  	int (*flush)(struct dn_fib_table *t);
  	int (*dump)(struct dn_fib_table *t, struct sk_buff *skb, struct netlink_callback *cb);
  
  	unsigned char data[0];
  };
  
  #ifdef CONFIG_DECNET_ROUTER
  /*
   * dn_fib.c
   */
59ddd965c   Joe Perches   decnet (dn*.h): R...
99
100
101
102
103
104
105
106
107
108
109
110
  void dn_fib_init(void);
  void dn_fib_cleanup(void);
  
  int dn_fib_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
  struct dn_fib_info *dn_fib_create_info(const struct rtmsg *r,
  				       struct nlattr *attrs[],
  				       const struct nlmsghdr *nlh, int *errp);
  int dn_fib_semantic_match(int type, struct dn_fib_info *fi,
  			  const struct flowidn *fld, struct dn_fib_res *res);
  void dn_fib_release_info(struct dn_fib_info *fi);
  void dn_fib_flush(void);
  void dn_fib_select_multipath(const struct flowidn *fld, struct dn_fib_res *res);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
111
112
113
114
  
  /*
   * dn_tables.c
   */
59ddd965c   Joe Perches   decnet (dn*.h): R...
115
116
117
118
  struct dn_fib_table *dn_fib_get_table(u32 n, int creat);
  struct dn_fib_table *dn_fib_empty_table(void);
  void dn_fib_table_init(void);
  void dn_fib_table_cleanup(void);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
119
120
121
122
  
  /*
   * dn_rules.c
   */
59ddd965c   Joe Perches   decnet (dn*.h): R...
123
124
125
126
  void dn_fib_rules_init(void);
  void dn_fib_rules_cleanup(void);
  unsigned int dnet_addr_type(__le16 addr);
  int dn_fib_lookup(struct flowidn *fld, struct dn_fib_res *res);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
127

59ddd965c   Joe Perches   decnet (dn*.h): R...
128
  int dn_fib_dump(struct sk_buff *skb, struct netlink_callback *cb);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
129

59ddd965c   Joe Perches   decnet (dn*.h): R...
130
  void dn_fib_free_info(struct dn_fib_info *fi);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
131
132
133
  
  static inline void dn_fib_info_put(struct dn_fib_info *fi)
  {
e0542dd51   Reshetova, Elena   net, decnet: conv...
134
  	if (refcount_dec_and_test(&fi->fib_clntref))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
135
136
137
138
139
140
141
142
  		dn_fib_free_info(fi);
  }
  
  static inline void dn_fib_res_put(struct dn_fib_res *res)
  {
  	if (res->fi)
  		dn_fib_info_put(res->fi);
  	if (res->r)
a8731cbf6   Steven Whitehouse   [DECNET]: Covert ...
143
  		fib_rule_put(res->r);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
144
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
145
146
147
148
149
150
151
152
153
154
155
156
  #else /* Endnode */
  
  #define dn_fib_init()  do { } while(0)
  #define dn_fib_cleanup() do { } while(0)
  
  #define dn_fib_lookup(fl, res) (-ESRCH)
  #define dn_fib_info_put(fi) do { } while(0)
  #define dn_fib_select_multipath(fl, res) do { } while(0)
  #define dn_fib_rules_policy(saddr,res,flags) (0)
  #define dn_fib_res_put(res) do { } while(0)
  
  #endif /* CONFIG_DECNET_ROUTER */
c4ea94ab3   Steven Whitehouse   [DECnet]: Endian ...
157
  static inline __le16 dnet_make_mask(int n)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
158
  {
c4106aa88   Harvey Harrison   decnet: remove pr...
159
160
161
  	if (n)
  		return cpu_to_le16(~((1 << (16 - n)) - 1));
  	return cpu_to_le16(0);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
162
163
164
  }
  
  #endif /* _NET_DN_FIB_H */