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