Lines Matching refs:dst

88 u32 *dst_cow_metrics_generic(struct dst_entry *dst, unsigned long old);
97 static inline bool dst_metrics_read_only(const struct dst_entry *dst) in dst_metrics_read_only() argument
99 return dst->_metrics & DST_METRICS_READ_ONLY; in dst_metrics_read_only()
102 void __dst_destroy_metrics_generic(struct dst_entry *dst, unsigned long old);
104 static inline void dst_destroy_metrics_generic(struct dst_entry *dst) in dst_destroy_metrics_generic() argument
106 unsigned long val = dst->_metrics; in dst_destroy_metrics_generic()
108 __dst_destroy_metrics_generic(dst, val); in dst_destroy_metrics_generic()
111 static inline u32 *dst_metrics_write_ptr(struct dst_entry *dst) in dst_metrics_write_ptr() argument
113 unsigned long p = dst->_metrics; in dst_metrics_write_ptr()
118 return dst->ops->cow_metrics(dst, p); in dst_metrics_write_ptr()
125 static inline void dst_init_metrics(struct dst_entry *dst, in dst_init_metrics() argument
129 dst->_metrics = ((unsigned long) src_metrics) | in dst_init_metrics()
144 static inline u32 *dst_metrics_ptr(struct dst_entry *dst) in dst_metrics_ptr() argument
146 return DST_METRICS_PTR(dst); in dst_metrics_ptr()
150 dst_metric_raw(const struct dst_entry *dst, const int metric) in dst_metric_raw() argument
152 u32 *p = DST_METRICS_PTR(dst); in dst_metric_raw()
158 dst_metric(const struct dst_entry *dst, const int metric) in dst_metric() argument
163 return dst_metric_raw(dst, metric); in dst_metric()
167 dst_metric_advmss(const struct dst_entry *dst) in dst_metric_advmss() argument
169 u32 advmss = dst_metric_raw(dst, RTAX_ADVMSS); in dst_metric_advmss()
172 advmss = dst->ops->default_advmss(dst); in dst_metric_advmss()
177 static inline void dst_metric_set(struct dst_entry *dst, int metric, u32 val) in dst_metric_set() argument
179 u32 *p = dst_metrics_write_ptr(dst); in dst_metric_set()
192 dst_feature(const struct dst_entry *dst, u32 feature) in dst_feature() argument
194 return dst_metric(dst, RTAX_FEATURES) & feature; in dst_feature()
199 static inline u32 dst_mtu(const struct dst_entry *dst) in dst_mtu() argument
201 return INDIRECT_CALL_INET(dst->ops->mtu, ip6_mtu, ipv4_mtu, dst); in dst_mtu()
205 static inline unsigned long dst_metric_rtt(const struct dst_entry *dst, int metric) in dst_metric_rtt() argument
207 return msecs_to_jiffies(dst_metric(dst, metric)); in dst_metric_rtt()
211 dst_allfrag(const struct dst_entry *dst) in dst_allfrag() argument
213 int ret = dst_feature(dst, RTAX_FEATURE_ALLFRAG); in dst_allfrag()
218 dst_metric_locked(const struct dst_entry *dst, int metric) in dst_metric_locked() argument
220 return dst_metric(dst, RTAX_LOCK) & (1 << metric); in dst_metric_locked()
223 static inline void dst_hold(struct dst_entry *dst) in dst_hold() argument
230 WARN_ON(atomic_inc_not_zero(&dst->__refcnt) == 0); in dst_hold()
233 static inline void dst_use_noref(struct dst_entry *dst, unsigned long time) in dst_use_noref() argument
235 if (unlikely(time != dst->lastuse)) { in dst_use_noref()
236 dst->__use++; in dst_use_noref()
237 dst->lastuse = time; in dst_use_noref()
241 static inline void dst_hold_and_use(struct dst_entry *dst, unsigned long time) in dst_hold_and_use() argument
243 dst_hold(dst); in dst_hold_and_use()
244 dst_use_noref(dst, time); in dst_hold_and_use()
247 static inline struct dst_entry *dst_clone(struct dst_entry *dst) in dst_clone() argument
249 if (dst) in dst_clone()
250 dst_hold(dst); in dst_clone()
251 return dst; in dst_clone()
254 void dst_release(struct dst_entry *dst);
256 void dst_release_immediate(struct dst_entry *dst);
298 static inline bool dst_hold_safe(struct dst_entry *dst) in dst_hold_safe() argument
300 return atomic_inc_not_zero(&dst->__refcnt); in dst_hold_safe()
313 struct dst_entry *dst = skb_dst(skb); in skb_dst_force() local
316 if (!dst_hold_safe(dst)) in skb_dst_force()
317 dst = NULL; in skb_dst_force()
319 skb->_skb_refdst = (unsigned long)dst; in skb_dst_force()
320 skb->slow_gro |= !!dst; in skb_dst_force()
373 const struct dst_entry *dst; in dst_tclassid() local
375 dst = skb_dst(skb); in dst_tclassid()
376 if (dst) in dst_tclassid()
377 return dst->tclassid; in dst_tclassid()
389 void dst_init(struct dst_entry *dst, struct dst_ops *ops,
392 struct dst_entry *dst_destroy(struct dst_entry *dst);
393 void dst_dev_put(struct dst_entry *dst);
395 static inline void dst_confirm(struct dst_entry *dst) in dst_confirm() argument
399 static inline struct neighbour *dst_neigh_lookup(const struct dst_entry *dst, const void *daddr) in dst_neigh_lookup() argument
401 struct neighbour *n = dst->ops->neigh_lookup(dst, NULL, daddr); in dst_neigh_lookup()
405 static inline struct neighbour *dst_neigh_lookup_skb(const struct dst_entry *dst, in dst_neigh_lookup_skb() argument
410 if (WARN_ON_ONCE(!dst->ops->neigh_lookup)) in dst_neigh_lookup_skb()
413 n = dst->ops->neigh_lookup(dst, skb, NULL); in dst_neigh_lookup_skb()
418 static inline void dst_confirm_neigh(const struct dst_entry *dst, in dst_confirm_neigh() argument
421 if (dst->ops->confirm_neigh) in dst_confirm_neigh()
422 dst->ops->confirm_neigh(dst, daddr); in dst_confirm_neigh()
427 struct dst_entry *dst = skb_dst(skb); in dst_link_failure() local
428 if (dst && dst->ops && dst->ops->link_failure) in dst_link_failure()
429 dst->ops->link_failure(skb); in dst_link_failure()
432 static inline void dst_set_expires(struct dst_entry *dst, int timeout) in dst_set_expires() argument
439 if (dst->expires == 0 || time_before(expires, dst->expires)) in dst_set_expires()
440 dst->expires = expires; in dst_set_expires()
468 static inline struct dst_entry *dst_check(struct dst_entry *dst, u32 cookie) in dst_check() argument
470 if (dst->obsolete) in dst_check()
471 dst = INDIRECT_CALL_INET(dst->ops->check, ip6_dst_check, in dst_check()
472 ipv4_dst_check, dst, cookie); in dst_check()
473 return dst; in dst_check()
511 static inline struct xfrm_state *dst_xfrm(const struct dst_entry *dst) in dst_xfrm() argument
532 static inline struct xfrm_state *dst_xfrm(const struct dst_entry *dst) in dst_xfrm() argument
534 return dst->xfrm; in dst_xfrm()
540 struct dst_entry *dst = skb_dst(skb); in skb_dst_update_pmtu() local
542 if (dst && dst->ops->update_pmtu) in skb_dst_update_pmtu()
543 dst->ops->update_pmtu(dst, NULL, skb, mtu, true); in skb_dst_update_pmtu()
549 struct dst_entry *dst = skb_dst(skb); in skb_dst_update_pmtu_no_confirm() local
551 if (dst && dst->ops->update_pmtu) in skb_dst_update_pmtu_no_confirm()
552 dst->ops->update_pmtu(dst, NULL, skb, mtu, false); in skb_dst_update_pmtu_no_confirm()
555 struct dst_entry *dst_blackhole_check(struct dst_entry *dst, u32 cookie);
556 void dst_blackhole_update_pmtu(struct dst_entry *dst, struct sock *sk,
558 void dst_blackhole_redirect(struct dst_entry *dst, struct sock *sk,
560 u32 *dst_blackhole_cow_metrics(struct dst_entry *dst, unsigned long old);
561 struct neighbour *dst_blackhole_neigh_lookup(const struct dst_entry *dst,
564 unsigned int dst_blackhole_mtu(const struct dst_entry *dst);