Lines Matching defs:c
5 * (c) 1995 Alan Cox, <alan@lxorguk.ukuu.org.uk>
378 const struct mfc_cache *c = ptr;
380 return cmparg->mfc_mcastgrp != c->mfc_mcastgrp ||
381 cmparg->mfc_origin != c->mfc_origin;
608 * c. packet is not truncated
725 struct mr_mfc *c = container_of(head, struct mr_mfc, rcu);
727 kmem_cache_free(mrt_cachep, (struct mfc_cache *)c);
730 static void ipmr_cache_free(struct mfc_cache *c)
732 call_rcu(&c->_c.rcu, ipmr_cache_free_rcu);
738 static void ipmr_destroy_unres(struct mr_table *mrt, struct mfc_cache *c)
746 while ((skb = skb_dequeue(&c->_c.mfc_un.unres.unresolved))) {
763 ipmr_cache_free(c);
770 struct mr_mfc *c, *next;
785 list_for_each_entry_safe(c, next, &mrt->mfc_unres_queue, list) {
786 if (time_after(c->mfc_un.unres.expires, now)) {
787 unsigned long interval = c->mfc_un.unres.expires - now;
793 list_del(&c->list);
794 mroute_netlink_event(mrt, (struct mfc_cache *)c, RTM_DELROUTE);
795 ipmr_destroy_unres(mrt, (struct mfc_cache *)c);
975 struct mfc_cache *c = kmem_cache_zalloc(mrt_cachep, GFP_KERNEL);
977 if (c) {
978 c->_c.mfc_un.res.last_assert = jiffies - MFC_ASSERT_THRESH - 1;
979 c->_c.mfc_un.res.minvif = MAXVIFS;
980 c->_c.free = ipmr_cache_free_rcu;
981 refcount_set(&c->_c.mfc_un.res.refcount, 1);
983 return c;
988 struct mfc_cache *c = kmem_cache_zalloc(mrt_cachep, GFP_ATOMIC);
990 if (c) {
991 skb_queue_head_init(&c->_c.mfc_un.unres.unresolved);
992 c->_c.mfc_un.unres.expires = jiffies + 10 * HZ;
994 return c;
999 struct mfc_cache *uc, struct mfc_cache *c)
1010 if (mr_fill_mroute(mrt, skb, &c->_c,
1026 ip_mr_forward(net, mrt, skb->dev, skb, c, 0);
1124 struct mfc_cache *c;
1129 list_for_each_entry(c, &mrt->mfc_unres_queue, _c.list) {
1130 if (c->mfc_mcastgrp == iph->daddr &&
1131 c->mfc_origin == iph->saddr) {
1139 c = ipmr_cache_alloc_unres();
1140 if (!c) {
1148 c->_c.mfc_parent = -1;
1149 c->mfc_origin = iph->saddr;
1150 c->mfc_mcastgrp = iph->daddr;
1161 ipmr_cache_free(c);
1167 list_add(&c->_c.list, &mrt->mfc_unres_queue);
1168 mroute_netlink_event(mrt, c, RTM_NEWROUTE);
1172 c->_c.mfc_un.unres.expires);
1176 if (c->_c.mfc_un.unres.unresolved.qlen > 3) {
1184 skb_queue_tail(&c->_c.mfc_un.unres.unresolved, skb);
1197 struct mfc_cache *c;
1201 c = ipmr_cache_find_parent(mrt, mfc->mfcc_origin.s_addr,
1204 if (!c)
1206 rhltable_remove(&mrt->mfc_hash, &c->_c.mnode, ipmr_rht_params);
1207 list_del_rcu(&c->_c.list);
1208 call_ipmr_mfc_entry_notifiers(net, FIB_EVENT_ENTRY_DEL, c, mrt->id);
1209 mroute_netlink_event(mrt, c, RTM_DELROUTE);
1210 mr_cache_put(&c->_c);
1218 struct mfc_cache *uc, *c;
1228 c = ipmr_cache_find_parent(mrt, mfc->mfcc_origin.s_addr,
1231 if (c) {
1233 c->_c.mfc_parent = mfc->mfcc_parent;
1234 ipmr_update_thresholds(mrt, &c->_c, mfc->mfcc_ttls);
1236 c->_c.mfc_flags |= MFC_STATIC;
1238 call_ipmr_mfc_entry_notifiers(net, FIB_EVENT_ENTRY_REPLACE, c,
1240 mroute_netlink_event(mrt, c, RTM_NEWROUTE);
1248 c = ipmr_cache_alloc();
1249 if (!c)
1252 c->mfc_origin = mfc->mfcc_origin.s_addr;
1253 c->mfc_mcastgrp = mfc->mfcc_mcastgrp.s_addr;
1254 c->_c.mfc_parent = mfc->mfcc_parent;
1255 ipmr_update_thresholds(mrt, &c->_c, mfc->mfcc_ttls);
1257 c->_c.mfc_flags |= MFC_STATIC;
1259 ret = rhltable_insert_key(&mrt->mfc_hash, &c->cmparg, &c->_c.mnode,
1263 ipmr_cache_free(c);
1266 list_add_tail_rcu(&c->_c.list, &mrt->mfc_cache_list);
1274 if (uc->mfc_origin == c->mfc_origin &&
1275 uc->mfc_mcastgrp == c->mfc_mcastgrp) {
1287 ipmr_cache_resolve(net, mrt, uc, c);
1290 call_ipmr_mfc_entry_notifiers(net, FIB_EVENT_ENTRY_ADD, c, mrt->id);
1291 mroute_netlink_event(mrt, c, RTM_NEWROUTE);
1299 struct mr_mfc *c, *tmp;
1318 list_for_each_entry_safe(c, tmp, &mrt->mfc_cache_list, list) {
1319 if (((c->mfc_flags & MFC_STATIC) && !(flags & MRT_FLUSH_MFC_STATIC)) ||
1320 (!(c->mfc_flags & MFC_STATIC) && !(flags & MRT_FLUSH_MFC)))
1322 rhltable_remove(&mrt->mfc_hash, &c->mnode, ipmr_rht_params);
1323 list_del_rcu(&c->list);
1324 cache = (struct mfc_cache *)c;
1328 mr_cache_put(c);
1335 list_for_each_entry_safe(c, tmp, &mrt->mfc_unres_queue, list) {
1336 list_del(&c->list);
1337 cache = (struct mfc_cache *)c;
1640 struct mfc_cache *c;
1673 c = ipmr_cache_find(mrt, sr->src.s_addr, sr->grp.s_addr);
1674 if (c) {
1675 sr->pktcnt = atomic_long_read(&c->_c.mfc_un.res.pkt);
1676 sr->bytecnt = atomic_long_read(&c->_c.mfc_un.res.bytes);
1677 sr->wrong_if = atomic_long_read(&c->_c.mfc_un.res.wrong_if);
1710 struct mfc_cache *c;
1745 c = ipmr_cache_find(mrt, sr.src.s_addr, sr.grp.s_addr);
1746 if (c) {
1747 sr.pktcnt = atomic_long_read(&c->_c.mfc_un.res.pkt);
1748 sr.bytecnt = atomic_long_read(&c->_c.mfc_un.res.bytes);
1749 sr.wrong_if = atomic_long_read(&c->_c.mfc_un.res.wrong_if);
1998 struct mfc_cache *c, int local)
2004 vif = c->_c.mfc_parent;
2005 atomic_long_inc(&c->_c.mfc_un.res.pkt);
2006 atomic_long_add(skb->len, &c->_c.mfc_un.res.bytes);
2007 WRITE_ONCE(c->_c.mfc_un.res.lastuse, jiffies);
2009 if (c->mfc_origin == htonl(INADDR_ANY) && true_vifi >= 0) {
2038 atomic_long_inc(&c->_c.mfc_un.res.wrong_if);
2047 c->_c.mfc_un.res.ttls[true_vifi] < 255) &&
2049 c->_c.mfc_un.res.last_assert +
2051 c->_c.mfc_un.res.last_assert = jiffies;
2067 if (c->mfc_origin == htonl(INADDR_ANY) &&
2068 c->mfc_mcastgrp == htonl(INADDR_ANY)) {
2070 true_vifi != c->_c.mfc_parent &&
2072 c->_c.mfc_un.res.ttls[c->_c.mfc_parent]) {
2077 psend = c->_c.mfc_parent;
2082 for (ct = c->_c.mfc_un.res.maxvif - 1;
2083 ct >= c->_c.mfc_un.res.minvif; ct--) {
2085 if ((c->mfc_origin != htonl(INADDR_ANY) ||
2087 ip_hdr(skb)->ttl > c->_c.mfc_un.res.ttls[ct]) {
2243 struct mfc_cache *c)
2248 atomic_long_inc(&c->_c.mfc_un.res.pkt);
2249 atomic_long_add(skb->len, &c->_c.mfc_un.res.bytes);
2250 WRITE_ONCE(c->_c.mfc_un.res.lastuse, jiffies);
2253 if (c->mfc_origin == htonl(INADDR_ANY) &&
2254 c->mfc_mcastgrp == htonl(INADDR_ANY)) {
2256 c->_c.mfc_un.res.ttls[c->_c.mfc_parent]) {
2261 psend = c->_c.mfc_parent;
2267 for (ct = c->_c.mfc_un.res.maxvif - 1;
2268 ct >= c->_c.mfc_un.res.minvif; ct--) {
2269 if (ip_hdr(skb)->ttl > c->_c.mfc_un.res.ttls[ct]) {
2462 u32 portid, u32 seq, struct mfc_cache *c, int cmd,
2483 if (c->_c.mfc_flags & MFC_STATIC)
2489 if (nla_put_in_addr(skb, RTA_SRC, c->mfc_origin) ||
2490 nla_put_in_addr(skb, RTA_DST, c->mfc_mcastgrp))
2492 err = mr_fill_mroute(mrt, skb, &c->_c, rtm);
2506 u32 portid, u32 seq, struct mr_mfc *c, int cmd,
2509 return ipmr_fill_mroute(mrt, skb, portid, seq, (struct mfc_cache *)c,