VirtualBox

Changeset 16214 in vbox


Ignore:
Timestamp:
Jan 24, 2009 8:23:29 AM (16 years ago)
Author:
vboxsync
Message:

NAT:bootp more readable

Location:
trunk/src/VBox/Devices/Network/slirp
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Network/slirp/bootp.c

    r16213 r16214  
    139139    int send_nak = 0;
    140140
     141#define FILL_BOOTP_EXT(q, tag, len, pvalue)                     \
     142    do {                                                        \
     143        struct bootp_ext *be = (struct bootp_ext *)(q);         \
     144        be->bpe_tag = (tag);                                    \
     145        be->bpe_len = (len);                                    \
     146        memcpy(&be[1], (pvalue), (len));                        \
     147        (q) = (uint8_t *)(&be[1]) + (len);                      \
     148    }while(0)
     149
    141150    /* extract exact DHCP msg type */
    142151    requested_ip.s_addr = 0xffffffff;
     
    251260        LogRel(("NAT: DHCP offered IP address %R[IP4]\n",
    252261                &daddr.sin_addr));
    253 
    254262    if (   dhcp_msg_type == DHCPDISCOVER
    255263        || dhcp_msg_type == DHCPREQUEST)
    256264    {
    257         *q++ = RFC2132_SRV_ID;
    258         *q++ = 4;
    259         memcpy(q, &saddr.sin_addr, 4);
    260         q += 4;
     265        FILL_BOOTP_EXT(q, RFC2132_SRV_ID, 4, &saddr.sin_addr);
    261266    }
    262267
     
    265270         || dhcp_msg_type == DHCPREQUEST))
    266271    {
    267         *q++ = RFC1533_NETMASK;
    268         *q++ = 4;
    269         *q++ = (pData->netmask & 0xff000000) >> 24;
    270         *q++ = (pData->netmask & 0x00ff0000) >> 16;
    271         *q++ = (pData->netmask & 0x0000ff00) >>  8;
    272         *q++ = (pData->netmask & 0x000000ff);
    273 
    274         *q++ = RFC1533_GATEWAY;
    275         *q++ = 4;
    276         memcpy(q, &saddr.sin_addr, 4);
    277         q += 4;
    278 
    279         *q++ = RFC1533_DNS;
    280         *q++ = 4;
     272        uint32_t lease_time = htonl(LEASE_TIME);
     273        uint32_t netmask = htonl(pData->netmask);
     274
     275        FILL_BOOTP_EXT(q, RFC1533_NETMASK, 4, &netmask);
     276        FILL_BOOTP_EXT(q, RFC1533_GATEWAY, 4, &saddr.sin_addr);
     277
    281278        dns_addr_dhcp.s_addr = htonl(ntohl(special_addr.s_addr) | CTL_DNS);
    282         memcpy(q, &dns_addr_dhcp, 4);
    283         q += 4;
    284 
    285         *q++ = RFC2132_LEASE_TIME;
    286         *q++ = 4;
    287         val = htonl(LEASE_TIME);
    288         memcpy(q, &val, 4);
    289         q += 4;
     279        FILL_BOOTP_EXT(q, RFC1533_DNS, 4, &dns_addr_dhcp.s_addr);
     280
     281        FILL_BOOTP_EXT(q, RFC2132_LEASE_TIME, 4, &lease_time);
    290282
    291283        if (*slirp_hostname)
    292284        {
    293285            val = (int)strlen(slirp_hostname);
    294             *q++ = RFC1533_HOSTNAME;
    295             *q++ = val;
    296             memcpy(q, slirp_hostname, val);
    297             q += val;
     286            FILL_BOOTP_EXT(q, RFC1533_HOSTNAME, val, slirp_hostname);
    298287        }
    299288
     
    301290        {
    302291            val = (int)strlen(pData->pszDomain);
    303             *q++ = RFC1533_DOMAINNAME;
    304             *q++ = val;
    305             memcpy(q, pData->pszDomain, val);
    306             q += val;
     292            FILL_BOOTP_EXT(q, RFC1533_DOMAINNAME, val, pData->pszDomain);
    307293        }
    308294    }
  • trunk/src/VBox/Devices/Network/slirp/bootp.h

    r15093 r16214  
    114114};
    115115
     116struct bootp_ext
     117{
     118    uint8_t bpe_tag;
     119    uint8_t bpe_len;
     120};
     121
    116122void bootp_input(PNATState, struct mbuf *m);
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette