commit 18cbe8c5f68e5e545d02f773da03f52deadfd45b Author: Hannes Reinecke Date: Wed Mar 12 10:36:30 2008 +0100 Fill in initiator values for iBFT context The iBFT context already contains the fields for the initiator, so we can as well fill them with something sensible. Signed-off-by: Hannes Reinecke diff --git a/include/fw_context.h b/include/fw_context.h index 47ac6ae..f6999e3 100644 --- a/include/fw_context.h +++ b/include/fw_context.h @@ -33,8 +33,9 @@ struct boot_context { char chap_password_in[16]; char iface[42]; char mac[18]; - char ipaddr[18]; - char mask[18]; + char ipaddr[32]; + char mask[19]; + char gwaddr[32]; char lun[17]; char vlan[15]; char isid[10]; diff --git a/utils/fwparam_ibft/fwparam_ibft.c b/utils/fwparam_ibft/fwparam_ibft.c index 4397f94..3801028 100644 --- a/utils/fwparam_ibft/fwparam_ibft.c +++ b/utils/fwparam_ibft/fwparam_ibft.c @@ -150,6 +150,32 @@ format_ipaddr(char *buf, size_t size, uint8_t *ip) } +void +format_netmask(char *buf, size_t size, uint8_t mask) +{ + uint32_t tmp; + + tmp = 0xffffffff << (32 - mask); + sprintf(buf,"%d.%d.%d.%d", + (tmp >> 24) & 0xff, + (tmp >> 16) & 0xff, + (tmp >> 8) & 0xff, + tmp & 0xff); +} + +void +format_mac(char *buf, size_t size, uint8_t *mac) +{ + int i; + + for (i = 0; i < 5; i++) { + sprintf(buf, "%02x:", mac[i]); + buf += 3; + } + sprintf(buf, "%02x", mac[i]); +} + + /* * Dump the 16 byte ipaddr, as IPV6 or IPV4. */ @@ -385,6 +411,45 @@ dump_ibft(void *ibft_loc, struct boot_context *context) (char *)ibft_loc+initiator->initiator_name_off, initiator->initiator_name_len + 1); + if (nic0 && (nic0->hdr.flags & INIT_FLAG_FW_SEL_BOOT)) { + format_ipaddr(buf, sizeof(buf), + nic0->ip_addr); + strcpy((char *)context->ipaddr, buf); + + format_ipaddr(buf, sizeof(buf), + nic0->gateway); + strcpy((char *)context->gwaddr, buf); + + format_mac(buf, sizeof(buf), + nic0->mac); + strcpy((char *)context->mac, buf); + + format_netmask(buf, sizeof(buf), + nic0->subnet_mask_prefix); + strcpy((char *)context->mask, buf); + } + + if (nic1 && (nic1->hdr.flags & INIT_FLAG_FW_SEL_BOOT)) { + format_ipaddr(buf, sizeof(buf), + nic1->ip_addr); + strncpy((char *)context->ipaddr, buf, + sizeof(buf)); + format_ipaddr(buf, sizeof(buf), + nic1->gateway); + strncpy((char *)context->gwaddr, buf, + sizeof(buf)); + + format_mac(buf, sizeof(buf), + nic1->mac); + strncpy((char *)context->mac, buf, + sizeof(buf)); + + format_netmask(buf, sizeof(buf), + nic1->subnet_mask_prefix); + strncpy((char *)context->mask, buf, + sizeof(buf)); + } + if (tgt0 && (tgt0->hdr.flags & INIT_FLAG_FW_SEL_BOOT)) { strncpy((char *)context->targetname, (char *)(ibft_loc+tgt0->tgt_name_off),