Lines Matching refs:mep
9 struct br_cfm_mep *mep; in br_mep_find() local
11 hlist_for_each_entry(mep, &br->mep_list, head) in br_mep_find()
12 if (mep->instance == instance) in br_mep_find()
13 return mep; in br_mep_find()
21 struct br_cfm_mep *mep; in br_mep_find_ifindex() local
23 hlist_for_each_entry_rcu(mep, &br->mep_list, head, in br_mep_find_ifindex()
25 if (mep->create.ifindex == ifindex) in br_mep_find_ifindex()
26 return mep; in br_mep_find_ifindex()
31 static struct br_cfm_peer_mep *br_peer_mep_find(struct br_cfm_mep *mep, in br_peer_mep_find() argument
36 hlist_for_each_entry_rcu(peer_mep, &mep->peer_mep_list, head, in br_peer_mep_find()
132 interval_us = interval_to_us(peer_mep->mep->cc_config.exp_interval); in ccm_rx_timer_start()
161 static struct sk_buff *ccm_frame_build(struct br_cfm_mep *mep, in ccm_frame_build() argument
180 b_port = rcu_dereference(mep->b_port); in ccm_frame_build()
199 ether_addr_copy(eth_hdr->h_source, mep->config.unicast_mac.addr); in ccm_frame_build()
204 common_hdr->mdlevel_version = mep->config.mdlevel << 5; in ccm_frame_build()
206 common_hdr->flags = (mep->rdi << 7) | in ccm_frame_build()
207 interval_to_pdu(mep->cc_config.exp_interval); in ccm_frame_build()
213 *snumber = cpu_to_be32(mep->ccm_tx_snumber); in ccm_frame_build()
214 mep->ccm_tx_snumber += 1; in ccm_frame_build()
220 *mepid = cpu_to_be16((u16)mep->config.mepid); in ccm_frame_build()
223 memcpy(maid->data, mep->cc_config.exp_maid.data, sizeof(maid->data)); in ccm_frame_build()
270 struct br_cfm_mep *mep; in ccm_tx_work_expired() local
275 mep = container_of(del_work, struct br_cfm_mep, ccm_tx_dwork); in ccm_tx_work_expired()
277 if (time_before_eq(mep->ccm_tx_end, jiffies)) { in ccm_tx_work_expired()
279 mep->cc_ccm_tx_info.period = 0; in ccm_tx_work_expired()
283 skb = ccm_frame_build(mep, &mep->cc_ccm_tx_info); in ccm_tx_work_expired()
287 interval_us = interval_to_us(mep->cc_config.exp_interval); in ccm_tx_work_expired()
288 queue_delayed_work(system_wq, &mep->ccm_tx_dwork, in ccm_tx_work_expired()
319 b_port = rcu_dereference(peer_mep->mep->b_port); in ccm_rx_work_expired()
378 struct br_cfm_mep *mep; in br_cfm_frame_rx() local
393 mep = br_mep_find_ifindex(br, port->dev->ifindex); in br_cfm_frame_rx()
394 if (unlikely(!mep)) in br_cfm_frame_rx()
399 if (mdlevel > mep->config.mdlevel) in br_cfm_frame_rx()
405 mep->status.version_unexp_seen = true; in br_cfm_frame_rx()
409 if (mdlevel < mep->config.mdlevel) { in br_cfm_frame_rx()
411 mep->status.rx_level_low_seen = true; in br_cfm_frame_rx()
423 if (memcmp(maid->data, mep->cc_config.exp_maid.data, in br_cfm_frame_rx()
434 peer_mep = br_peer_mep_find(mep, (u32)ntohs(*mepid)); in br_cfm_frame_rx()
440 if (mep->cc_config.exp_interval != pdu_to_interval(interval)) in br_cfm_frame_rx()
467 if (ntohl(*snumber) != (mep->ccm_rx_snumber + 1)) in br_cfm_frame_rx()
471 mep->ccm_rx_snumber = ntohl(*snumber); in br_cfm_frame_rx()
487 mep->status.opcode_unexp_seen = true; in br_cfm_frame_rx()
503 struct br_cfm_mep *mep; in br_cfm_mep_create() local
533 mep = br_mep_find(br, instance); in br_cfm_mep_create()
534 if (mep) { in br_cfm_mep_create()
542 mep = br_mep_find_ifindex(br, create->ifindex); in br_cfm_mep_create()
543 if (mep) { in br_cfm_mep_create()
550 mep = kzalloc(sizeof(*mep), GFP_KERNEL); in br_cfm_mep_create()
551 if (!mep) in br_cfm_mep_create()
554 mep->create = *create; in br_cfm_mep_create()
555 mep->instance = instance; in br_cfm_mep_create()
556 rcu_assign_pointer(mep->b_port, p); in br_cfm_mep_create()
558 INIT_HLIST_HEAD(&mep->peer_mep_list); in br_cfm_mep_create()
559 INIT_DELAYED_WORK(&mep->ccm_tx_dwork, ccm_tx_work_expired); in br_cfm_mep_create()
564 hlist_add_tail_rcu(&mep->head, &br->mep_list); in br_cfm_mep_create()
570 struct br_cfm_mep *mep) in mep_delete_implementation() argument
578 hlist_for_each_entry_safe(peer_mep, n_store, &mep->peer_mep_list, head) { in mep_delete_implementation()
584 cancel_delayed_work_sync(&mep->ccm_tx_dwork); in mep_delete_implementation()
586 RCU_INIT_POINTER(mep->b_port, NULL); in mep_delete_implementation()
587 hlist_del_rcu(&mep->head); in mep_delete_implementation()
588 kfree_rcu(mep, rcu); in mep_delete_implementation()
598 struct br_cfm_mep *mep; in br_cfm_mep_delete() local
602 mep = br_mep_find(br, instance); in br_cfm_mep_delete()
603 if (!mep) { in br_cfm_mep_delete()
609 mep_delete_implementation(br, mep); in br_cfm_mep_delete()
619 struct br_cfm_mep *mep; in br_cfm_mep_config_set() local
623 mep = br_mep_find(br, instance); in br_cfm_mep_config_set()
624 if (!mep) { in br_cfm_mep_config_set()
630 mep->config = *config; in br_cfm_mep_config_set()
641 struct br_cfm_mep *mep; in br_cfm_cc_config_set() local
645 mep = br_mep_find(br, instance); in br_cfm_cc_config_set()
646 if (!mep) { in br_cfm_cc_config_set()
653 if (memcmp(config, &mep->cc_config, sizeof(*config)) == 0) in br_cfm_cc_config_set()
656 if (config->enable && !mep->cc_config.enable) in br_cfm_cc_config_set()
658 hlist_for_each_entry(peer_mep, &mep->peer_mep_list, head) in br_cfm_cc_config_set()
661 if (!config->enable && mep->cc_config.enable) in br_cfm_cc_config_set()
663 hlist_for_each_entry(peer_mep, &mep->peer_mep_list, head) in br_cfm_cc_config_set()
666 mep->cc_config = *config; in br_cfm_cc_config_set()
667 mep->ccm_rx_snumber = 0; in br_cfm_cc_config_set()
668 mep->ccm_tx_snumber = 1; in br_cfm_cc_config_set()
678 struct br_cfm_mep *mep; in br_cfm_cc_peer_mep_add() local
682 mep = br_mep_find(br, instance); in br_cfm_cc_peer_mep_add()
683 if (!mep) { in br_cfm_cc_peer_mep_add()
689 peer_mep = br_peer_mep_find(mep, mepid); in br_cfm_cc_peer_mep_add()
701 peer_mep->mep = mep; in br_cfm_cc_peer_mep_add()
704 if (mep->cc_config.enable) in br_cfm_cc_peer_mep_add()
707 hlist_add_tail_rcu(&peer_mep->head, &mep->peer_mep_list); in br_cfm_cc_peer_mep_add()
717 struct br_cfm_mep *mep; in br_cfm_cc_peer_mep_remove() local
721 mep = br_mep_find(br, instance); in br_cfm_cc_peer_mep_remove()
722 if (!mep) { in br_cfm_cc_peer_mep_remove()
728 peer_mep = br_peer_mep_find(mep, mepid); in br_cfm_cc_peer_mep_remove()
746 struct br_cfm_mep *mep; in br_cfm_cc_rdi_set() local
750 mep = br_mep_find(br, instance); in br_cfm_cc_rdi_set()
751 if (!mep) { in br_cfm_cc_rdi_set()
757 mep->rdi = rdi; in br_cfm_cc_rdi_set()
766 struct br_cfm_mep *mep; in br_cfm_cc_ccm_tx() local
770 mep = br_mep_find(br, instance); in br_cfm_cc_ccm_tx()
771 if (!mep) { in br_cfm_cc_ccm_tx()
777 if (memcmp(tx_info, &mep->cc_ccm_tx_info, sizeof(*tx_info)) == 0) { in br_cfm_cc_ccm_tx()
779 if (mep->cc_ccm_tx_info.period == 0) in br_cfm_cc_ccm_tx()
784 mep->ccm_tx_end = jiffies + in br_cfm_cc_ccm_tx()
789 if (tx_info->period == 0 && mep->cc_ccm_tx_info.period == 0) in br_cfm_cc_ccm_tx()
793 if (tx_info->period != 0 && mep->cc_ccm_tx_info.period != 0) { in br_cfm_cc_ccm_tx()
797 mep->ccm_tx_end = jiffies + in br_cfm_cc_ccm_tx()
803 if (tx_info->period == 0 && mep->cc_ccm_tx_info.period != 0) { in br_cfm_cc_ccm_tx()
804 cancel_delayed_work_sync(&mep->ccm_tx_dwork); in br_cfm_cc_ccm_tx()
811 mep->ccm_tx_end = jiffies + usecs_to_jiffies(tx_info->period * 1000000); in br_cfm_cc_ccm_tx()
812 queue_delayed_work(system_wq, &mep->ccm_tx_dwork, 0); in br_cfm_cc_ccm_tx()
815 mep->cc_ccm_tx_info = *tx_info; in br_cfm_cc_ccm_tx()
822 struct br_cfm_mep *mep; in br_cfm_mep_count() local
827 hlist_for_each_entry_rcu(mep, &br->mep_list, head) in br_cfm_mep_count()
837 struct br_cfm_mep *mep; in br_cfm_peer_mep_count() local
842 hlist_for_each_entry_rcu(mep, &br->mep_list, head) in br_cfm_peer_mep_count()
843 hlist_for_each_entry_rcu(peer_mep, &mep->peer_mep_list, head) in br_cfm_peer_mep_count()
860 struct br_cfm_mep *mep; in br_cfm_port_del() local
864 hlist_for_each_entry_safe(mep, n_store, &br->mep_list, head) in br_cfm_port_del()
865 if (mep->create.ifindex == port->dev->ifindex) in br_cfm_port_del()
866 mep_delete_implementation(br, mep); in br_cfm_port_del()