void MSTP_OUT_tx_bpdu(port_t * ifc, bpdu_t * bpdu, int size)
{
- char *bpdu_type;
+ char *bpdu_type, *tcflag;
bridge_t *br = ifc->bridge;
switch(bpdu->protocolVersion)
break;
case bpduTypeTCN:
bpdu_type = "STP-TCN";
- ++(ifc->num_tx_tcn);
break;
default:
bpdu_type = "STP-UnknownType";
bpdu_type = "UnknownProto";
}
- LOG_PRTNAME(br, ifc, "sending %s BPDU%s", bpdu_type,
- (bpdu->flags & (1 << offsetTc)) ? ", tcFlag" : "");
+ ++(ifc->num_tx_bpdu);
+ if((protoSTP == bpdu->protocolVersion) && (bpduTypeTCN == bpdu->bpduType))
+ {
+ ++(ifc->num_tx_tcn);
+ LOG_PRTNAME(br, ifc, "sending %s BPDU", bpdu_type);
+ }
+ else
+ {
+ tcflag = "";
+ if(bpdu->flags & (1 << offsetTc))
+ {
+ ++(ifc->num_tx_tcn);
+ tcflag = ", tcFlag";
+ }
+ LOG_PRTNAME(br, ifc, "sending %s BPDU%s", bpdu_type, tcflag);
+ }
struct llc_header h;
memcpy(h.dest_addr, bridge_group_address, ETH_ALEN);
{ .iov_base = &h, .iov_len = sizeof(h) },
{ .iov_base = bpdu, .iov_len = size }
};
- ++(ifc->num_tx_bpdu);
- if(bpdu->flags & (1 << offsetTc))
- ++(ifc->num_tx_tcn);
+
packet_send(ifc->sysdeps.if_index, iov, 2, sizeof(h) + size);
}
bridge_t *br = prt->bridge;
++(prt->num_rx_bpdu);
- if(bpdu->flags & (1 << offsetTc))
- ++(prt->num_rx_tcn);
- if(bpdu->bpduType == bpduTypeTCN)
- ++(prt->num_rx_tcn);
if(prt->BpduGuardPort)
{
goto bpdu_validation_failed;
}
+ if((protoSTP == bpdu->protocolVersion) && (bpduTypeTCN == bpdu->bpduType))
+ {
+ ++(prt->num_rx_tcn);
+ }
+ else
+ {
+ if(bpdu->flags & (1 << offsetTc))
+ ++(prt->num_rx_tcn);
+ }
+
assign(prt->rcvdBpduData, *bpdu);
prt->rcvdBpdu = true;