- if (ccm_interval != cfm->ccm_interval) {
- VLOG_WARN_RL(&rl, "received a CCM with an invalid interval"
- " (%"PRIu8") from RMP %"PRIu16, ccm_interval,
- rmp->mpid);
+ if (ccm_interval != cfm->ccm_interval) {
+ VLOG_WARN_RL(&rl, "%s: received a CCM with an invalid interval"
+ " (%"PRIu8") from RMP %"PRIu64, cfm->name,
+ ccm_interval, ccm_mpid);
+ }
+
+ if (cfm->extended && ccm_interval == 0
+ && ccm_interval_ms_x != cfm->ccm_interval_ms) {
+ VLOG_WARN_RL(&rl, "%s: received a CCM with an invalid extended"
+ " interval (%"PRIu16"ms) from RMP %"PRIu64, cfm->name,
+ ccm_interval_ms_x, ccm_mpid);
+ }
+
+ rmp = lookup_remote_mp(cfm, ccm_mpid);
+ if (!rmp) {
+ if (hmap_count(&cfm->remote_mps) < CFM_MAX_RMPS) {
+ rmp = xzalloc(sizeof *rmp);
+ hmap_insert(&cfm->remote_mps, &rmp->node, hash_mpid(ccm_mpid));
+ } else {
+ cfm->recv_fault |= CFM_FAULT_OVERFLOW;
+ VLOG_WARN_RL(&rl,
+ "%s: dropped CCM with MPID %"PRIu64" from MAC "
+ ETH_ADDR_FMT, cfm->name, ccm_mpid,
+ ETH_ADDR_ARGS(eth->eth_src));