Commit 12f739d2 authored by Jean-Claude BAU's avatar Jean-Claude BAU

Fix issue calling S1 treatment in slave state

The S1 treatment must be called only if the foreign master is
accepted/registered by the BMCA.
parent 2d55a960
......@@ -336,7 +336,7 @@ extern int bmc_pidcmp(struct PortIdentity *a, struct PortIdentity *b);
extern int bmc(struct pp_globals *ppg);
extern void bmc_store_frgn_master(struct pp_instance *ppi,
struct pp_frgn_master *frgn_master, void *buf, int len);
extern void bmc_add_frgn_master(struct pp_instance *ppi, struct pp_frgn_master *frgn_master);
extern struct pp_frgn_master * bmc_add_frgn_master(struct pp_instance *ppi, struct pp_frgn_master *frgn_master);
extern void bmc_flush_erbest(struct pp_instance *ppi);
extern void bmc_calculate_ebest(struct pp_globals *ppg);
extern int bmc_apply_state_descision(struct pp_instance *ppi);
......
......@@ -861,7 +861,7 @@ void bmc_store_frgn_master(struct pp_instance *ppi,
}
void bmc_add_frgn_master(struct pp_instance *ppi, struct pp_frgn_master *frgn_master)
struct pp_frgn_master * bmc_add_frgn_master(struct pp_instance *ppi, struct pp_frgn_master *frgn_master)
{
int sel;
MsgHeader *hdr = &ppi->received_ptp_header;
......@@ -892,7 +892,7 @@ void bmc_add_frgn_master(struct pp_instance *ppi, struct pp_frgn_master *frgn_m
if (!bmc_idcmp(&pid->clockIdentity, &DSDEF(ppi)->clockIdentity) &&
pid->portNumber==ppi->port_idx) {
pp_diag(ppi, bmc, 2, "Announce frame from same port\n");
return;
return NULL;
}
sel = 0;
ppi->frgn_rec_num=1;
......@@ -924,10 +924,10 @@ void bmc_add_frgn_master(struct pp_instance *ppi, struct pp_frgn_master *frgn_m
pp_timeout_reset(ppi, PP_TO_ANN_RECEIPT);
} else if (cmpres > 0) {
pp_diag(ppi, bmc, 2, "Announce frame from a worse port on this clock\n");
return;
return NULL;
} else {
pp_diag(ppi, bmc, 2, "Announce frame from this port\n");
return;
return NULL;
}
}
} else {
......@@ -935,7 +935,7 @@ void bmc_add_frgn_master(struct pp_instance *ppi, struct pp_frgn_master *frgn_m
if (!bmc_idcmp(&pid->clockIdentity,
&DSDEF(ppi)->clockIdentity)) {
pp_diag(ppi, bmc, 2, "Announce frame from this clock\n");
return;
return NULL;
}
}
......@@ -944,7 +944,7 @@ void bmc_add_frgn_master(struct pp_instance *ppi, struct pp_frgn_master *frgn_m
pp_diag(ppi, bmc, 2, "Announce frame steps removed"
"larger or equal 255: %i\n",
frgn_master->stepsRemoved);
return;
return NULL;
}
/* Check if foreign master is already known */
......@@ -972,7 +972,7 @@ void bmc_add_frgn_master(struct pp_instance *ppi, struct pp_frgn_master *frgn_m
/* already in Foreign master data set, update info */
memcpy(&ppi->frgn_master[i], frgn_master,
sizeof(struct pp_frgn_master));
return;
return NULL;
}
}
......@@ -1016,7 +1016,7 @@ void bmc_add_frgn_master(struct pp_instance *ppi, struct pp_frgn_master *frgn_m
"master worse than worst in the full "
"table, skipping\n",
__func__, __LINE__);
return;
return NULL;
}
sel = worst;
......@@ -1037,6 +1037,7 @@ void bmc_add_frgn_master(struct pp_instance *ppi, struct pp_frgn_master *frgn_m
sizeof(struct pp_frgn_master));
pp_diag(ppi, bmc, 1, "New foreign Master %i added\n", sel);
return &ppi->frgn_master[sel];
}
static void bmc_flush_frgn_master(struct pp_instance *ppi)
......
......@@ -192,6 +192,7 @@ static int slave_handle_announce(struct pp_instance *ppi, void *buf, int len)
{
int ret;
struct pp_frgn_master frgn_master;
struct pp_frgn_master *reg_frgn_master;
if ((ret = st_com_handle_announce(ppi, buf, len))!=0)
return ret;
......@@ -220,18 +221,18 @@ static int slave_handle_announce(struct pp_instance *ppi, void *buf, int len)
return 0;
}
/* 9.2.6.11 a) reset timeout */
/* 9.2.6.12 a) reset timeout */
pp_timeout_reset(ppi, PP_TO_ANN_RECEIPT);
}
/* Add foreign master: Figure 36 & 54 */
bmc_add_frgn_master(ppi, &frgn_master);
if ( ( reg_frgn_master=bmc_add_frgn_master(ppi, &frgn_master))!=NULL) {
/* 9.5.3 Figure 36 update data set if announce from current master */
bmc_s1(ppi, reg_frgn_master);
/* 9.5.3 Figure 29 update data set if announce from current master */
bmc_s1(ppi, &frgn_master);
/* Save active peer MAC address */
memcpy(ppi->activePeer,ppi->peer, sizeof(ppi->activePeer));
/* Save active peer MAC address */
memcpy(ppi->activePeer,ppi->peer, sizeof(ppi->activePeer));
}
return 0;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment