- Added dual bridge support

This commit is contained in:
Jean-Michel Audet 2007-04-26 13:45:00 +00:00
parent ed84ac0a9b
commit 80b8d3b318

View File

@ -1327,6 +1327,7 @@ void getIpmiPayloadWireRep(
{
int cs, tmp, len;
int cs2 = 0;
int cs3 = 0;
uint8_t ourAddress = intf->my_addr;
uint8_t bridgedRequest = 0;
@ -1339,8 +1340,13 @@ void getIpmiPayloadWireRep(
if ((intf->target_addr == ourAddress) || (!bridgePossible))
cs = len;
else {
/* bridged request: encapsulate w/in Send Message */
bridgedRequest = 1;
if(intf->transit_addr != ourAddress)
{
bridgedRequest++;
}
/* bridged request: encapsulate w/in Send Message */
cs = len;
msg[len++] = IPMI_BMC_SLAVE_ADDR;
msg[len++] = IPMI_NETFN_APP << 2;
@ -1349,17 +1355,40 @@ void getIpmiPayloadWireRep(
cs2 = len;
msg[len++] = IPMI_REMOTE_SWID;
msg[len++] = curr_seq << 2;
msg[len++] = 0x34; /* Send Message rqst */
#if 0 /* From lan.c example */
if(bridgedRequest == 2)
msg[len++] = (0x40|intf->transit_channel); /* Track request*/
else
msg[len++] = (0x40|intf->target_channel); /* Track request*/
payload->payload_length += 7;
cs = len;
if(bridgedRequest == 2)
{
/* bridged request: encapsulate w/in Send Message */
cs = len;
msg[len++] = intf->transit_addr;
msg[len++] = IPMI_NETFN_APP << 2;
tmp = len - cs;
msg[len++] = ipmi_csum(msg+cs, tmp);
cs3 = len;
msg[len++] = intf->my_addr;
msg[len++] = curr_seq << 2;
msg[len++] = 0x34; /* Send Message rqst */
#if 0 /* From lan.c example */
entry->req.msg.target_cmd = entry->req.msg.cmd; /* Save target command */
entry->req.msg.cmd = 0x34; /* (fixup request entry) */
#endif
#endif
msg[len++] = (0x40|intf->target_channel); /* Track request*/
payload->payload_length += 7;
cs = len;
}
}
/* rsAddr */
msg[len++] = intf->target_addr; /* IPMI_BMC_SLAVE_ADDR; */
@ -1394,6 +1423,13 @@ void getIpmiPayloadWireRep(
tmp = len - cs;
msg[len++] = ipmi_csum(msg+cs, tmp);
/* Dual bridged request: 2nd checksum */
if (bridgedRequest == 2) {
tmp = len - cs3;
msg[len++] = ipmi_csum(msg+cs3, tmp);
payload->payload_length += 1;
}
/* bridged request: 2nd checksum */
if (bridgedRequest) {
tmp = len - cs2;