#ifndef _NET_DST_OPS_H #define _NET_DST_OPS_H #include <linux/types.h> #include <linux/percpu_counter.h> #include <linux/cache.h> struct dst_entry; struct kmem_cachep; struct net_device; struct sk_buff; struct sock; struct net; struct dst_ops { unsigned short family; unsigned int gc_thresh; int (*gc)(struct dst_ops *ops); struct dst_entry * (*check)(struct dst_entry *, __u32 cookie); unsigned int (*default_advmss)(const struct dst_entry *); unsigned int (*mtu)(const struct dst_entry *); u32 * (*cow_metrics)(struct dst_entry *, unsigned long); void (*destroy)(struct dst_entry *); void (*ifdown)(struct dst_entry *, struct net_device *dev, int how); struct dst_entry * (*negative_advice)(struct dst_entry *); void (*link_failure)(struct sk_buff *); void (*update_pmtu)(struct dst_entry *dst, struct sock *sk, struct sk_buff *skb, u32 mtu); void (*redirect)(struct dst_entry *dst, struct sock *sk, struct sk_buff *skb); int (*local_out)(struct net *net, struct sock *sk, struct sk_buff *skb); struct neighbour * (*neigh_lookup)(const struct dst_entry *dst, struct sk_buff *skb, const void *daddr); struct kmem_cache *kmem_cachep; struct percpu_counter pcpuc_entries ____cacheline_aligned_in_smp; }; static inline int dst_entries_get_fast(struct dst_ops *dst) { return percpu_counter_read_positive(&dst->pcpuc_entries); } static inline int dst_entries_get_slow(struct dst_ops *dst) { int res; local_bh_disable(); res = percpu_counter_sum_positive(&dst->pcpuc_entries); local_bh_enable(); return res; } static inline void dst_entries_add(struct dst_ops *dst, int val) { local_bh_disable(); percpu_counter_add(&dst->pcpuc_entries, val); local_bh_enable(); } static inline int dst_entries_init(struct dst_ops *dst) { return percpu_counter_init(&dst->pcpuc_entries, 0, GFP_KERNEL); } static inline void dst_entries_destroy(struct dst_ops *dst) { percpu_counter_destroy(&dst->pcpuc_entries); } #endif 89389b4d5524350e74974cf711fe4a18206c09d3'>commit</a><a href='/cgit.cgi/linux/net-next.git/diff/drivers/usb/atm/xusbatm.c?id=89389b4d5524350e74974cf711fe4a18206c09d3'>diff</a></td><td class='form'><form class='right' method='get' action='/cgit.cgi/linux/net-next.git/log/drivers/usb/atm/xusbatm.c'> <input type='hidden' name='id' value='89389b4d5524350e74974cf711fe4a18206c09d3'/><input type='hidden' name='showmsg' value='1'/><select name='qt'> <option value='grep'>log msg</option> <option value='author'>author</option> <option value='committer'>committer</option> <option value='range'>range</option> </select> <input class='txt' type='search' size='10' name='q' value=''/> <input type='submit' value='search'/> </form> </td></tr></table> <div class='path'>path: <a href='/cgit.cgi/linux/net-next.git/log/?id=89389b4d5524350e74974cf711fe4a18206c09d3&showmsg=1'>root</a>/<a href='/cgit.cgi/linux/net-next.git/log/drivers?id=89389b4d5524350e74974cf711fe4a18206c09d3&showmsg=1'>drivers</a>/<a href='/cgit.cgi/linux/net-next.git/log/drivers/usb?id=89389b4d5524350e74974cf711fe4a18206c09d3&showmsg=1'>usb</a>/<a href='/cgit.cgi/linux/net-next.git/log/drivers/usb/atm?id=89389b4d5524350e74974cf711fe4a18206c09d3&showmsg=1'>atm</a>/<a href='/cgit.cgi/linux/net-next.git/log/drivers/usb/atm/xusbatm.c?id=89389b4d5524350e74974cf711fe4a18206c09d3&showmsg=1'>xusbatm.c</a></div><div class='content'><table class='list nowrap'><tr class='nohover'><th class='left'>Age</th><th class='left'>Commit message (<a href='/cgit.cgi/linux/net-next.git/log/drivers/usb/atm/xusbatm.c?id=89389b4d5524350e74974cf711fe4a18206c09d3'>Collapse</a>)</th><th class='left'>Author</th><th class='left'>Files</th><th class='left'>Lines</th></tr>