diff options
Diffstat (limited to 'include/net/dn_route.h')
| -rw-r--r-- | include/net/dn_route.h | 60 |
1 files changed, 35 insertions, 25 deletions
diff --git a/include/net/dn_route.h b/include/net/dn_route.h index 5122da3f2eb..55df9939bca 100644 --- a/include/net/dn_route.h +++ b/include/net/dn_route.h @@ -15,11 +15,13 @@ GNU General Public License for more details. *******************************************************************************/ -extern struct sk_buff *dn_alloc_skb(struct sock *sk, int size, gfp_t pri); -extern int dn_route_output_sock(struct dst_entry **pprt, struct flowi *, struct sock *sk, int flags); -extern int dn_cache_dump(struct sk_buff *skb, struct netlink_callback *cb); -extern int dn_cache_getroute(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg); -extern void dn_rt_cache_flush(int delay); +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); +int dn_route_rcv(struct sk_buff *skb, struct net_device *dev, + struct packet_type *pt, struct net_device *orig_dev); /* Masks for flags field */ #define DN_RT_F_PID 0x07 /* Mask for packet type */ @@ -66,26 +68,35 @@ extern void dn_rt_cache_flush(int delay); * packets to the originating host. */ struct dn_route { - union { - struct dst_entry dst; - struct dn_route *rt_next; - } u; - - __u16 rt_saddr; - __u16 rt_daddr; - __u16 rt_gateway; - __u16 rt_local_src; /* Source used for forwarding packets */ - __u16 rt_src_map; - __u16 rt_dst_map; - - unsigned rt_flags; - unsigned rt_type; - - struct flowi fl; + struct dst_entry dst; + + struct neighbour *n; + + struct flowidn fld; + + __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; + + unsigned int rt_flags; + unsigned int rt_type; }; -extern void dn_route_init(void); -extern void dn_route_cleanup(void); +static inline bool dn_is_input_route(struct dn_route *rt) +{ + return rt->fld.flowidn_iif != 0; +} + +static inline bool dn_is_output_route(struct dn_route *rt) +{ + return rt->fld.flowidn_iif == 0; +} + +void dn_route_init(void); +void dn_route_cleanup(void); #include <net/sock.h> #include <linux/if_arp.h> @@ -102,8 +113,7 @@ static inline void dn_rt_finish_output(struct sk_buff *skb, char *dst, char *src if ((dev->type != ARPHRD_ETHER) && (dev->type != ARPHRD_LOOPBACK)) dst = NULL; - if (!dev->hard_header || (dev->hard_header(skb, dev, ETH_P_DNA_RT, - dst, src, skb->len) >= 0)) + if (dev_hard_header(skb, dev, ETH_P_DNA_RT, dst, src, skb->len) >= 0) dn_rt_send(skb); else kfree_skb(skb); |
