Add a default of 'incapable' for 802.1AS mode.

Signed-off-by: Richard Cochran <richardcochran@gmail.com>
master
Richard Cochran 2013-01-27 15:57:46 +01:00
parent ad8a197a0b
commit ea833f3d6b
1 changed files with 24 additions and 2 deletions

26
port.c
View File

@ -36,6 +36,7 @@
#include "tmv.h" #include "tmv.h"
#include "util.h" #include "util.h"
#define ALLOWED_LOST_RESPONSES 3
#define PORT_MAVE_LENGTH 10 #define PORT_MAVE_LENGTH 10
struct nrate_estimator { struct nrate_estimator {
@ -69,6 +70,7 @@ struct port {
struct mave *avg_delay; struct mave *avg_delay;
int log_sync_interval; int log_sync_interval;
struct nrate_estimator nrate; struct nrate_estimator nrate;
unsigned int pdr_missing;
/* portDS */ /* portDS */
struct port_defaults pod; struct port_defaults pod;
struct PortIdentity portIdentity; struct PortIdentity portIdentity;
@ -90,6 +92,9 @@ struct port {
#define NSEC2SEC 1000000000LL #define NSEC2SEC 1000000000LL
static int port_capable(struct port *p);
static int port_is_ieee8021as(struct port *p);
static int announce_compare(struct ptp_message *m1, struct ptp_message *m2) static int announce_compare(struct ptp_message *m1, struct ptp_message *m2)
{ {
struct announce_msg *a = &m1->announce, *b = &m2->announce; struct announce_msg *a = &m1->announce, *b = &m2->announce;
@ -314,7 +319,12 @@ static void free_foreign_masters(struct port *p)
static int incapable_ignore(struct port *p, struct ptp_message *m) static int incapable_ignore(struct port *p, struct ptp_message *m)
{ {
/* For now, we are always capable. */ if (port_capable(p)) {
return 0;
}
if (msg_type(m) == ANNOUNCE || msg_type(m) == SYNC) {
return 1;
}
return 0; return 0;
} }
@ -366,7 +376,16 @@ static int path_trace_ignore(struct port *p, struct ptp_message *m)
static int port_capable(struct port *p) static int port_capable(struct port *p)
{ {
/* For now, we are always capable. */ if (!port_is_ieee8021as(p)) {
/* Normal 1588 ports are always capable. */
return 1;
}
/*
* TODO - Compare p->peer_delay with neighborPropDelayThresh.
*/
if (p->pdr_missing > ALLOWED_LOST_RESPONSES) {
return 0;
}
return 1; return 1;
} }
@ -505,6 +524,9 @@ static void port_nrate_initialize(struct port *p)
if (shift < 0) if (shift < 0)
shift = 0; shift = 0;
/* We start in the 'incapable' state. */
p->pdr_missing = ALLOWED_LOST_RESPONSES + 1;
p->nrate.origin1 = tmv_zero(); p->nrate.origin1 = tmv_zero();
p->nrate.ingress1 = tmv_zero(); p->nrate.ingress1 = tmv_zero();
p->nrate.max_count = (1 << shift); p->nrate.max_count = (1 << shift);