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); ...@@ -336,7 +336,7 @@ extern int bmc_pidcmp(struct PortIdentity *a, struct PortIdentity *b);
extern int bmc(struct pp_globals *ppg); extern int bmc(struct pp_globals *ppg);
extern void bmc_store_frgn_master(struct pp_instance *ppi, extern void bmc_store_frgn_master(struct pp_instance *ppi,
struct pp_frgn_master *frgn_master, void *buf, int len); 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_flush_erbest(struct pp_instance *ppi);
extern void bmc_calculate_ebest(struct pp_globals *ppg); extern void bmc_calculate_ebest(struct pp_globals *ppg);
extern int bmc_apply_state_descision(struct pp_instance *ppi); extern int bmc_apply_state_descision(struct pp_instance *ppi);
......
...@@ -861,7 +861,7 @@ void bmc_store_frgn_master(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; int sel;
MsgHeader *hdr = &ppi->received_ptp_header; 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 ...@@ -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) && if (!bmc_idcmp(&pid->clockIdentity, &DSDEF(ppi)->clockIdentity) &&
pid->portNumber==ppi->port_idx) { pid->portNumber==ppi->port_idx) {
pp_diag(ppi, bmc, 2, "Announce frame from same port\n"); pp_diag(ppi, bmc, 2, "Announce frame from same port\n");
return; return NULL;
} }
sel = 0; sel = 0;
ppi->frgn_rec_num=1; ppi->frgn_rec_num=1;
...@@ -924,10 +924,10 @@ void bmc_add_frgn_master(struct pp_instance *ppi, struct pp_frgn_master *frgn_m ...@@ -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); pp_timeout_reset(ppi, PP_TO_ANN_RECEIPT);
} else if (cmpres > 0) { } else if (cmpres > 0) {
pp_diag(ppi, bmc, 2, "Announce frame from a worse port on this clock\n"); pp_diag(ppi, bmc, 2, "Announce frame from a worse port on this clock\n");
return; return NULL;
} else { } else {
pp_diag(ppi, bmc, 2, "Announce frame from this port\n"); pp_diag(ppi, bmc, 2, "Announce frame from this port\n");
return; return NULL;
} }
} }
} else { } else {
...@@ -935,7 +935,7 @@ void bmc_add_frgn_master(struct pp_instance *ppi, struct pp_frgn_master *frgn_m ...@@ -935,7 +935,7 @@ void bmc_add_frgn_master(struct pp_instance *ppi, struct pp_frgn_master *frgn_m
if (!bmc_idcmp(&pid->clockIdentity, if (!bmc_idcmp(&pid->clockIdentity,
&DSDEF(ppi)->clockIdentity)) { &DSDEF(ppi)->clockIdentity)) {
pp_diag(ppi, bmc, 2, "Announce frame from this clock\n"); 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 ...@@ -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" pp_diag(ppi, bmc, 2, "Announce frame steps removed"
"larger or equal 255: %i\n", "larger or equal 255: %i\n",
frgn_master->stepsRemoved); frgn_master->stepsRemoved);
return; return NULL;
} }
/* Check if foreign master is already known */ /* 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 ...@@ -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 */ /* already in Foreign master data set, update info */
memcpy(&ppi->frgn_master[i], frgn_master, memcpy(&ppi->frgn_master[i], frgn_master,
sizeof(struct pp_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 ...@@ -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 " "master worse than worst in the full "
"table, skipping\n", "table, skipping\n",
__func__, __LINE__); __func__, __LINE__);
return; return NULL;
} }
sel = worst; sel = worst;
...@@ -1037,6 +1037,7 @@ void bmc_add_frgn_master(struct pp_instance *ppi, struct pp_frgn_master *frgn_m ...@@ -1037,6 +1037,7 @@ void bmc_add_frgn_master(struct pp_instance *ppi, struct pp_frgn_master *frgn_m
sizeof(struct pp_frgn_master)); sizeof(struct pp_frgn_master));
pp_diag(ppi, bmc, 1, "New foreign Master %i added\n", sel); 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) 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) ...@@ -192,6 +192,7 @@ static int slave_handle_announce(struct pp_instance *ppi, void *buf, int len)
{ {
int ret; int ret;
struct pp_frgn_master frgn_master; struct pp_frgn_master frgn_master;
struct pp_frgn_master *reg_frgn_master;
if ((ret = st_com_handle_announce(ppi, buf, len))!=0) if ((ret = st_com_handle_announce(ppi, buf, len))!=0)
return ret; return ret;
...@@ -220,18 +221,18 @@ static int slave_handle_announce(struct pp_instance *ppi, void *buf, int len) ...@@ -220,18 +221,18 @@ static int slave_handle_announce(struct pp_instance *ppi, void *buf, int len)
return 0; return 0;
} }
/* 9.2.6.11 a) reset timeout */ /* 9.2.6.12 a) reset timeout */
pp_timeout_reset(ppi, PP_TO_ANN_RECEIPT); pp_timeout_reset(ppi, PP_TO_ANN_RECEIPT);
} }
/* Add foreign master: Figure 36 & 54 */ /* 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 */
/* 9.5.3 Figure 29 update data set if announce from current master */ bmc_s1(ppi, reg_frgn_master);
bmc_s1(ppi, &frgn_master);
/* Save active peer MAC address */ /* Save active peer MAC address */
memcpy(ppi->activePeer,ppi->peer, sizeof(ppi->activePeer)); memcpy(ppi->activePeer,ppi->peer, sizeof(ppi->activePeer));
}
return 0; 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