home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / net / ip6_route.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  4.3 KB  |  164 lines

  1. #ifndef _NET_IP6_ROUTE_H
  2. #define _NET_IP6_ROUTE_H
  3.  
  4. #define IP6_RT_PRIO_FW        16
  5. #define IP6_RT_PRIO_USER    1024
  6. #define IP6_RT_PRIO_ADDRCONF    256
  7. #define IP6_RT_PRIO_KERN    512
  8. #define IP6_RT_FLOW_MASK    0x00ff
  9.  
  10. struct route_info {
  11.     __u8            type;
  12.     __u8            length;
  13.     __u8            prefix_len;
  14. #if defined(__BIG_ENDIAN_BITFIELD)
  15.     __u8            reserved_h:3,
  16.                 route_pref:2,
  17.                 reserved_l:3;
  18. #elif defined(__LITTLE_ENDIAN_BITFIELD)
  19.     __u8            reserved_l:3,
  20.                 route_pref:2,
  21.                 reserved_h:3;
  22. #endif
  23.     __u32            lifetime;
  24.     __u8            prefix[0];    /* 0,8 or 16 */
  25. };
  26.  
  27. #ifdef __KERNEL__
  28.  
  29. #include <net/flow.h>
  30. #include <net/ip6_fib.h>
  31. #include <net/sock.h>
  32. #include <linux/ip.h>
  33. #include <linux/ipv6.h>
  34.  
  35. struct pol_chain {
  36.     int            type;
  37.     int            priority;
  38.     struct fib6_node    *rules;
  39.     struct pol_chain    *next;
  40. };
  41.  
  42. extern struct rt6_info    ip6_null_entry;
  43.  
  44. extern int ip6_rt_gc_interval;
  45.  
  46. extern void            ip6_route_input(struct sk_buff *skb);
  47.  
  48. extern struct dst_entry *    ip6_route_output(struct sock *sk,
  49.                          struct flowi *fl);
  50.  
  51. extern int            ip6_route_me_harder(struct sk_buff *skb);
  52.  
  53. extern void            ip6_route_init(void);
  54. extern void            ip6_route_cleanup(void);
  55.  
  56. extern int            ipv6_route_ioctl(unsigned int cmd, void __user *arg);
  57.  
  58. extern int            ip6_route_add(struct in6_rtmsg *rtmsg,
  59.                           struct nlmsghdr *,
  60.                           void *rtattr,
  61.                           struct netlink_skb_parms *req);
  62. extern int            ip6_ins_rt(struct rt6_info *,
  63.                        struct nlmsghdr *,
  64.                        void *rtattr,
  65.                        struct netlink_skb_parms *req);
  66. extern int            ip6_del_rt(struct rt6_info *,
  67.                        struct nlmsghdr *,
  68.                        void *rtattr,
  69.                        struct netlink_skb_parms *req);
  70.  
  71. extern int            ip6_rt_addr_add(struct in6_addr *addr,
  72.                         struct net_device *dev,
  73.                         int anycast);
  74.  
  75. extern int            ip6_rt_addr_del(struct in6_addr *addr,
  76.                         struct net_device *dev);
  77.  
  78. extern void            rt6_sndmsg(int type, struct in6_addr *dst,
  79.                        struct in6_addr *src,
  80.                        struct in6_addr *gw,
  81.                        struct net_device *dev, 
  82.                        int dstlen, int srclen,
  83.                        int metric, __u32 flags);
  84.  
  85. extern struct rt6_info        *rt6_lookup(struct in6_addr *daddr,
  86.                         struct in6_addr *saddr,
  87.                         int oif, int flags);
  88.  
  89. extern struct dst_entry *ndisc_dst_alloc(struct net_device *dev,
  90.                      struct neighbour *neigh,
  91.                      struct in6_addr *addr,
  92.                      int (*output)(struct sk_buff *));
  93. extern int ndisc_dst_gc(int *more);
  94. extern void fib6_force_start_gc(void);
  95.  
  96. extern struct rt6_info *addrconf_dst_alloc(struct inet6_dev *idev,
  97.                        const struct in6_addr *addr,
  98.                        int anycast);
  99.  
  100. /*
  101.  *    support functions for ND
  102.  *
  103.  */
  104. extern struct rt6_info *    rt6_get_dflt_router(struct in6_addr *addr,
  105.                             struct net_device *dev);
  106. extern struct rt6_info *    rt6_add_dflt_router(struct in6_addr *gwaddr,
  107.                             struct net_device *dev,
  108.                             unsigned int pref);
  109.  
  110. extern void            rt6_purge_dflt_routers(void);
  111.  
  112. extern int            rt6_route_rcv(struct net_device *dev,
  113.                           u8 *opt, int len,
  114.                           struct in6_addr *gwaddr);
  115.  
  116. extern void            rt6_redirect(struct in6_addr *dest,
  117.                          struct in6_addr *saddr,
  118.                          struct neighbour *neigh,
  119.                          u8 *lladdr,
  120.                          int on_link);
  121.  
  122. extern void            rt6_pmtu_discovery(struct in6_addr *daddr,
  123.                            struct in6_addr *saddr,
  124.                            struct net_device *dev,
  125.                            u32 pmtu);
  126.  
  127. struct nlmsghdr;
  128. struct netlink_callback;
  129. extern int inet6_dump_fib(struct sk_buff *skb, struct netlink_callback *cb);
  130. extern int inet6_rtm_newroute(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg);
  131. extern int inet6_rtm_delroute(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg);
  132. extern int inet6_rtm_getroute(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg);
  133.  
  134. extern void rt6_ifdown(struct net_device *dev);
  135. extern void rt6_mtu_change(struct net_device *dev, unsigned mtu);
  136.  
  137. extern rwlock_t rt6_lock;
  138.  
  139. /*
  140.  *    Store a destination cache entry in a socket
  141.  */
  142. static inline void ip6_dst_store(struct sock *sk, struct dst_entry *dst,
  143.                      struct in6_addr *daddr)
  144. {
  145.     struct ipv6_pinfo *np = inet6_sk(sk);
  146.     struct rt6_info *rt = (struct rt6_info *) dst;
  147.  
  148.     write_lock(&sk->sk_dst_lock);
  149.     __sk_dst_set(sk, dst);
  150.     np->daddr_cache = daddr;
  151.     np->dst_cookie = rt->rt6i_node ? rt->rt6i_node->fn_sernum : 0;
  152.     write_unlock(&sk->sk_dst_lock);
  153. }
  154.  
  155. static inline int ipv6_unicast_destination(struct sk_buff *skb)
  156. {
  157.     struct rt6_info *rt = (struct rt6_info *) skb->dst;
  158.  
  159.     return rt->rt6i_flags & RTF_LOCAL;
  160. }
  161.  
  162. #endif
  163. #endif
  164.