- uint32_t hash;
- struct remote_maid *rmaid;
-
- hash = hash_bytes(ccm->maid, sizeof ccm->maid, 0);
-
- HMAP_FOR_EACH_IN_BUCKET (rmaid, node, hash, &cfm->x_remote_maids) {
- if (memcmp(rmaid->maid, ccm->maid, sizeof rmaid->maid) == 0) {
- rmaid->recv_time = time_msec();
- return;
- }
+ cfmi->x_recv_time = time_msec();
+ cfm->fault = true;
+ VLOG_WARN_RL(&rl, "Received unexpected remote MAID from MAC "
+ ETH_ADDR_FMT, ETH_ADDR_ARGS(eth->eth_src));
+ } else {
+ ccm_mpid = ntohs(ccm->mpid);
+ ccm_interval = ccm->flags & 0x7;
+
+ rmp = lookup_remote_mp(&cfm->remote_mps, ccm_mpid);
+
+ if (rmp) {
+ rmp->recv_time = time_msec();
+ rmp->fault = ccm_interval != cfmi->ccm_interval;
+ cfm->fault = rmp->fault || cfm->fault;
+ } else {
+ cfmi->x_recv_time = time_msec();
+ cfm->fault = true;
+ VLOG_WARN_RL(&rl, "Received unexpected remote MPID %d from MAC "
+ ETH_ADDR_FMT, ccm_mpid, ETH_ADDR_ARGS(eth->eth_src));