case L2CEVT_L2CA_CONFIG_RSP: /* Upper layer config rsp */
l2cu_process_our_cfg_rsp(p_ccb, p_cfg);
- /* Local config done; clear cached configuration in case reconfig takes
- * place later */
- p_ccb->peer_cfg.mtu_present = false;
- p_ccb->peer_cfg.flush_to_present = false;
- p_ccb->peer_cfg.qos_present = false;
-
p_ccb->config_done |= IB_CFG_DONE;
if (p_ccb->config_done & OB_CFG_DONE) {
tempstate = p_ccb->chnl_state;
tempcfgdone = p_ccb->config_done;
p_ccb->chnl_state = CST_CONFIG;
+ // clear cached configuration in case reconfig takes place later
+ p_ccb->peer_cfg.mtu_present = false;
+ p_ccb->peer_cfg.flush_to_present = false;
+ p_ccb->peer_cfg.qos_present = false;
p_ccb->config_done &= ~IB_CFG_DONE;
alarm_set_on_mloop(p_ccb->l2c_ccb_timer, L2CAP_CHNL_CFG_TIMEOUT_MS,
}
}
/* Reload mtu from a previously accepted config request */
- else if (p_ccb->peer_cfg.mtu_present) {
+ else if (p_ccb->peer_cfg.mtu_present && !(p_ccb->config_done & IB_CFG_DONE)) {
p_cfg->mtu_present = true;
p_cfg->mtu = p_ccb->peer_cfg.mtu;
}
}
}
/* Reload flush_to from a previously accepted config request */
- else if (p_ccb->peer_cfg.flush_to_present) {
+ else if (p_ccb->peer_cfg.flush_to_present &&
+ !(p_ccb->config_done & IB_CFG_DONE)) {
p_cfg->flush_to_present = true;
p_cfg->flush_to = p_ccb->peer_cfg.flush_to;
}
}
}
/* Reload QOS from a previously accepted config request */
- else if (p_ccb->peer_cfg.qos_present) {
+ else if (p_ccb->peer_cfg.qos_present && !(p_ccb->config_done & IB_CFG_DONE)) {
p_cfg->qos_present = true;
p_cfg->qos = p_ccb->peer_cfg.qos;
}