Lines Matching refs:b

69 static void bearer_disable(struct net *net, struct tipc_bearer *b);
184 struct tipc_bearer *b; in tipc_bearer_find() local
188 b = rtnl_dereference(tn->bearer_list[i]); in tipc_bearer_find()
189 if (b && (!strcmp(b->name, name))) in tipc_bearer_find()
190 return b; in tipc_bearer_find()
203 struct tipc_bearer *b; in tipc_bearer_get_name() local
208 b = rtnl_dereference(tn->bearer_list[bearer_id]); in tipc_bearer_get_name()
209 if (!b) in tipc_bearer_get_name()
212 strcpy(name, b->name); in tipc_bearer_get_name()
218 struct tipc_bearer *b; in tipc_bearer_add_dest() local
221 b = bearer_get(net, bearer_id); in tipc_bearer_add_dest()
222 if (b) in tipc_bearer_add_dest()
223 tipc_disc_add_dest(b->disc); in tipc_bearer_add_dest()
229 struct tipc_bearer *b; in tipc_bearer_remove_dest() local
232 b = bearer_get(net, bearer_id); in tipc_bearer_remove_dest()
233 if (b) in tipc_bearer_remove_dest()
234 tipc_disc_remove_dest(b->disc); in tipc_bearer_remove_dest()
255 struct tipc_bearer *b; in tipc_enable_bearer() local
288 b = rtnl_dereference(tn->bearer_list[i]); in tipc_enable_bearer()
289 if (!b) { in tipc_enable_bearer()
293 if (!strcmp(name, b->name)) { in tipc_enable_bearer()
299 if (b->priority == prio && in tipc_enable_bearer()
325 b = kzalloc(sizeof(*b), GFP_ATOMIC); in tipc_enable_bearer()
326 if (!b) in tipc_enable_bearer()
329 strscpy(b->name, name); in tipc_enable_bearer()
330 b->media = m; in tipc_enable_bearer()
331 res = m->enable_media(net, b, attr); in tipc_enable_bearer()
333 kfree(b); in tipc_enable_bearer()
339 b->identity = bearer_id; in tipc_enable_bearer()
340 b->tolerance = m->tolerance; in tipc_enable_bearer()
341 b->min_win = m->min_win; in tipc_enable_bearer()
342 b->max_win = m->max_win; in tipc_enable_bearer()
343 b->domain = disc_domain; in tipc_enable_bearer()
344 b->net_plane = bearer_id + 'A'; in tipc_enable_bearer()
345 b->priority = prio; in tipc_enable_bearer()
346 refcount_set(&b->refcnt, 1); in tipc_enable_bearer()
348 res = tipc_disc_create(net, b, &b->bcast_addr, &skb); in tipc_enable_bearer()
350 bearer_disable(net, b); in tipc_enable_bearer()
358 bearer_disable(net, b); in tipc_enable_bearer()
363 test_and_set_bit_lock(0, &b->up); in tipc_enable_bearer()
364 rcu_assign_pointer(tn->bearer_list[bearer_id], b); in tipc_enable_bearer()
366 tipc_bearer_xmit_skb(net, bearer_id, skb, &b->bcast_addr); in tipc_enable_bearer()
381 static int tipc_reset_bearer(struct net *net, struct tipc_bearer *b) in tipc_reset_bearer() argument
383 pr_info("Resetting bearer <%s>\n", b->name); in tipc_reset_bearer()
384 tipc_node_delete_links(net, b->identity); in tipc_reset_bearer()
385 tipc_disc_reset(net, b); in tipc_reset_bearer()
389 bool tipc_bearer_hold(struct tipc_bearer *b) in tipc_bearer_hold() argument
391 return (b && refcount_inc_not_zero(&b->refcnt)); in tipc_bearer_hold()
394 void tipc_bearer_put(struct tipc_bearer *b) in tipc_bearer_put() argument
396 if (b && refcount_dec_and_test(&b->refcnt)) in tipc_bearer_put()
397 kfree_rcu(b, rcu); in tipc_bearer_put()
407 static void bearer_disable(struct net *net, struct tipc_bearer *b) in bearer_disable() argument
410 int bearer_id = b->identity; in bearer_disable()
412 pr_info("Disabling bearer <%s>\n", b->name); in bearer_disable()
413 clear_bit_unlock(0, &b->up); in bearer_disable()
415 b->media->disable_media(b); in bearer_disable()
416 RCU_INIT_POINTER(b->media_ptr, NULL); in bearer_disable()
417 if (b->disc) in bearer_disable()
418 tipc_disc_delete(b->disc); in bearer_disable()
420 tipc_bearer_put(b); in bearer_disable()
424 int tipc_enable_l2_media(struct net *net, struct tipc_bearer *b, in tipc_enable_l2_media() argument
427 char *dev_name = strchr((const char *)b->name, ':') + 1; in tipc_enable_l2_media()
428 int hwaddr_len = b->media->hwaddr_len; in tipc_enable_l2_media()
442 pr_info("Enabling <%s> not permitted\n", b->name); in tipc_enable_l2_media()
458 rcu_assign_pointer(b->media_ptr, dev); in tipc_enable_l2_media()
459 b->pt.dev = dev; in tipc_enable_l2_media()
460 b->pt.type = htons(ETH_P_TIPC); in tipc_enable_l2_media()
461 b->pt.func = tipc_l2_rcv_msg; in tipc_enable_l2_media()
462 dev_add_pack(&b->pt); in tipc_enable_l2_media()
463 memset(&b->bcast_addr, 0, sizeof(b->bcast_addr)); in tipc_enable_l2_media()
464 memcpy(b->bcast_addr.value, dev->broadcast, hwaddr_len); in tipc_enable_l2_media()
465 b->bcast_addr.media_id = b->media->type_id; in tipc_enable_l2_media()
466 b->bcast_addr.broadcast = TIPC_BROADCAST_SUPPORT; in tipc_enable_l2_media()
467 b->mtu = dev->mtu; in tipc_enable_l2_media()
468 b->media->raw2addr(b, &b->addr, (const char *)dev->dev_addr); in tipc_enable_l2_media()
469 rcu_assign_pointer(dev->tipc_ptr, b); in tipc_enable_l2_media()
478 void tipc_disable_l2_media(struct tipc_bearer *b) in tipc_disable_l2_media() argument
482 dev = (struct net_device *)rtnl_dereference(b->media_ptr); in tipc_disable_l2_media()
483 dev_remove_pack(&b->pt); in tipc_disable_l2_media()
497 struct tipc_bearer *b, struct tipc_media_addr *dest) in tipc_l2_send_msg() argument
502 dev = (struct net_device *)rcu_dereference(b->media_ptr); in tipc_l2_send_msg()
523 struct tipc_bearer *b; in tipc_bearer_bcast_support() local
526 b = bearer_get(net, bearer_id); in tipc_bearer_bcast_support()
527 if (b) in tipc_bearer_bcast_support()
528 supp = (b->bcast_addr.broadcast == TIPC_BROADCAST_SUPPORT); in tipc_bearer_bcast_support()
536 struct tipc_bearer *b; in tipc_bearer_mtu() local
539 b = bearer_get(net, bearer_id); in tipc_bearer_mtu()
540 if (b) in tipc_bearer_mtu()
541 mtu = b->mtu; in tipc_bearer_mtu()
549 struct tipc_bearer *b; in tipc_bearer_min_mtu() local
552 b = bearer_get(net, bearer_id); in tipc_bearer_min_mtu()
553 if (b) in tipc_bearer_min_mtu()
554 mtu += b->encap_hlen; in tipc_bearer_min_mtu()
566 struct tipc_bearer *b; in tipc_bearer_xmit_skb() local
569 b = bearer_get(net, bearer_id); in tipc_bearer_xmit_skb()
570 if (likely(b && (test_bit(0, &b->up) || msg_is_reset(hdr)))) { in tipc_bearer_xmit_skb()
572 tipc_crypto_xmit(net, &skb, b, dest, NULL); in tipc_bearer_xmit_skb()
575 b->media->send_msg(net, skb, b, dest); in tipc_bearer_xmit_skb()
589 struct tipc_bearer *b; in tipc_bearer_xmit() local
596 b = bearer_get(net, bearer_id); in tipc_bearer_xmit()
597 if (unlikely(!b)) in tipc_bearer_xmit()
601 if (likely(test_bit(0, &b->up) || msg_is_reset(buf_msg(skb)))) { in tipc_bearer_xmit()
603 tipc_crypto_xmit(net, &skb, b, dst, __dnode); in tipc_bearer_xmit()
606 b->media->send_msg(net, skb, b, dst); in tipc_bearer_xmit()
622 struct tipc_bearer *b; in tipc_bearer_bc_xmit() local
627 b = bearer_get(net, bearer_id); in tipc_bearer_bc_xmit()
628 if (unlikely(!b || !test_bit(0, &b->up))) in tipc_bearer_bc_xmit()
635 dst = &b->bcast_addr; in tipc_bearer_bc_xmit()
637 tipc_crypto_xmit(net, &skb, b, dst, NULL); in tipc_bearer_bc_xmit()
640 b->media->send_msg(net, skb, b, dst); in tipc_bearer_bc_xmit()
659 struct tipc_bearer *b; in tipc_l2_rcv_msg() local
662 b = rcu_dereference(dev->tipc_ptr) ?: in tipc_l2_rcv_msg()
664 if (likely(b && test_bit(0, &b->up) && in tipc_l2_rcv_msg()
668 tipc_rcv(dev_net(b->pt.dev), skb, b); in tipc_l2_rcv_msg()
691 struct tipc_bearer *b; in tipc_l2_device_event() local
693 b = rtnl_dereference(dev->tipc_ptr); in tipc_l2_device_event()
694 if (!b) in tipc_l2_device_event()
697 trace_tipc_l2_device_event(dev, b, evt); in tipc_l2_device_event()
701 test_and_set_bit_lock(0, &b->up); in tipc_l2_device_event()
706 clear_bit_unlock(0, &b->up); in tipc_l2_device_event()
707 tipc_reset_bearer(net, b); in tipc_l2_device_event()
710 test_and_set_bit_lock(0, &b->up); in tipc_l2_device_event()
714 bearer_disable(net, b); in tipc_l2_device_event()
717 b->mtu = dev->mtu; in tipc_l2_device_event()
718 tipc_reset_bearer(net, b); in tipc_l2_device_event()
721 b->media->raw2addr(b, &b->addr, in tipc_l2_device_event()
723 tipc_reset_bearer(net, b); in tipc_l2_device_event()
727 bearer_disable(net, b); in tipc_l2_device_event()
751 struct tipc_bearer *b; in tipc_bearer_stop() local
755 b = rtnl_dereference(tn->bearer_list[i]); in tipc_bearer_stop()
756 if (b) { in tipc_bearer_stop()
757 bearer_disable(net, b); in tipc_bearer_stop()
1066 struct tipc_bearer *b; in tipc_nl_bearer_add() local
1084 b = tipc_bearer_find(net, name); in tipc_nl_bearer_add()
1085 if (!b) { in tipc_nl_bearer_add()
1093 if (b->media->type_id != TIPC_MEDIA_TYPE_UDP) { in tipc_nl_bearer_add()
1099 err = tipc_udp_nl_bearer_add(b, in tipc_nl_bearer_add()
1111 struct tipc_bearer *b; in __tipc_nl_bearer_set() local
1130 b = tipc_bearer_find(net, name); in __tipc_nl_bearer_set()
1131 if (!b) { in __tipc_nl_bearer_set()
1145 b->tolerance = nla_get_u32(props[TIPC_NLA_PROP_TOL]); in __tipc_nl_bearer_set()
1146 tipc_node_apply_property(net, b, TIPC_NLA_PROP_TOL); in __tipc_nl_bearer_set()
1149 b->priority = nla_get_u32(props[TIPC_NLA_PROP_PRIO]); in __tipc_nl_bearer_set()
1151 b->max_win = nla_get_u32(props[TIPC_NLA_PROP_WIN]); in __tipc_nl_bearer_set()
1153 if (b->media->type_id != TIPC_MEDIA_TYPE_UDP) { in __tipc_nl_bearer_set()
1160 b->encap_hlen + TIPC_MIN_BEARER_MTU) { in __tipc_nl_bearer_set()
1165 b->mtu = nla_get_u32(props[TIPC_NLA_PROP_MTU]); in __tipc_nl_bearer_set()
1166 tipc_node_apply_property(net, b, TIPC_NLA_PROP_MTU); in __tipc_nl_bearer_set()