[Bridge] STP Explanation (2)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I saw some big mistakes, here's the correct version :
--------------------------------------------------------------------
void br_send_config_bpdu(struct net_bridge_port *p, struct bpdu *bpdu)
{
	unsigned char buf[42];

	buf[0] = bpdu->bpdu_header.protocol[0]; //0x00
	buf[1] = bpdu->bpdu_header.protocol[1]; //0x00
	buf[2] = bpdu->bpdu_header.version; //0x02
	buf[3] = BPDU_TYPE_CONFIG;
	buf[4] = bpdu->bpdu_body.flags.topo_change;
	buf[5] = bpdu->bpdu_body.flags.proposal;
	buf[6] = bpdu->bpdu_body.flags.port_role[0];
	buf[7] = bpdu->bpdu_body.flags.port_role[1];
	buf[8] = bpdu->bpdu_body.flags.learning;
	buf[9] = bpdu->bpdu_body.flags.forwarding;
	buf[10] = bpdu->bpdu_body.flags.agreement;
	buf[11] = bpdu->bpdu_body.flags.topo_change_ack;	
	buf[12] = bpdu->bpdu_body.root_id.prio[0];
	buf[13] = bpdu->bpdu_body.root_id.prio[1];
	buf[14] = bpdu->bpdu_body.root_id.addr[0];
	buf[15] = bpdu->bpdu_body.root_id.addr[1];
	buf[16] = bpdu->bpdu_body.root_id.addr[2];
	buf[17] = bpdu->bpdu_body.root_id.addr[3];
	buf[18] = bpdu->bpdu_body.root_id.addr[4];
	buf[19] = bpdu->bpdu_body.root_id.addr[5];
	buf[20] = (bpdu->bpdu_body.root_path_cost >> 24) & 0xFF;
	buf[21] = (bpdu->bpdu_body.root_path_cost >> 16) & 0xFF;
	buf[22] = (bpdu->bpdu_body.root_path_cost >> 8) & 0xFF;
	buf[23] = bpdu->bpdu_body.root_path_cost & 0xFF;
	buf[24] = bpdu->bpdu_body.bridge_id.prio[0];
	buf[25] = bpdu->bpdu_body.bridge_id.prio[1];
	buf[26] = bpdu->bpdu_body.bridge_id.addr[0];
	buf[27] = bpdu->bpdu_body.bridge_id.addr[1];
	buf[28] = bpdu->bpdu_body.bridge_id.addr[2];
	buf[29] = bpdu->bpdu_body.bridge_id.addr[3];
	buf[30] = bpdu->bpdu_body.bridge_id.addr[4];
	buf[31] = bpdu->bpdu_body.bridge_id.addr[5];
	buf[32] = (bpdu->bpdu_body.port_id >> 8) & 0xFF;
	buf[33] = bpdu->bpdu_body.port_id & 0xFF;

	br_set_ticks(buf+34, bpdu->bpdu_body.message_age);
	br_set_ticks(buf+36, bpdu->bpdu_body.max_age);
	br_set_ticks(buf+38, bpdu->bpdu_body.hello_time);
	br_set_ticks(buf+40, bpdu->bpdu_body.forward_delay);

	br_send_bpdu(p, buf, 42);
}
-------------------------------------------------------------------------
I also modified the following function like this :
------------------------------------------------------------------------------
/* called under bridge lock */
void br_send_tcn_bpdu(struct net_bridge_port *p)
{
	unsigned char buf[4];

	buf[0] = bpdu->bpdu_header.protocol[0]; //0x00
	buf[1] = bpdu->bpdu_header.protocol[1]; //0x00
	buf[2] = bpdu->bpdu_header.version; //0x02
	buf[3] = BPDU_TYPE_TCN;
	br_send_bpdu(p, buf, 4);
}

static unsigned char header[3] = {0x00, 0x00, 0x02};
------------------------------------------------------------------------

please tell me what do you think of because if i'm getting the wrong way, i prefer to know it quickly. ^^

regards,

Simon Henry
------------------------------------------

Faites un voeu et puis Voila ! www.voila.fr 




[Index of Archives]     [Netdev]     [AoE Tools]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]     [Video 4 Linux]

  Powered by Linux