static void bootp_reply(Slirp *slirp, const struct bootp_t *bp)

{

    BOOTPClient *bc = NULL;

    struct mbuf *m;

    struct bootp_t *rbp;

    struct sockaddr_in saddr, daddr;

    struct in_addr preq_addr;

    int dhcp_msg_type, val;

    uint8_t *q;

    uint8_t client_ethaddr[ETH_ALEN];



    /* extract exact DHCP msg type */

    dhcp_decode(bp, &dhcp_msg_type, &preq_addr);

    DPRINTF("bootp packet op=%d msgtype=%d", bp->bp_op, dhcp_msg_type);

    if (preq_addr.s_addr != htonl(0L))

        DPRINTF(" req_addr=%08" PRIx32 "\n", ntohl(preq_addr.s_addr));

    else

        DPRINTF("\n");



    if (dhcp_msg_type == 0)

        dhcp_msg_type = DHCPREQUEST; /* Force reply for old BOOTP clients */



    if (dhcp_msg_type != DHCPDISCOVER &&

        dhcp_msg_type != DHCPREQUEST)

        return;



    /* Get client's hardware address from bootp request */

    memcpy(client_ethaddr, bp->bp_hwaddr, ETH_ALEN);



    m = m_get(slirp);

    if (!m) {

        return;

    }

    m->m_data += IF_MAXLINKHDR;

    rbp = (struct bootp_t *)m->m_data;

    m->m_data += sizeof(struct udpiphdr);

    memset(rbp, 0, sizeof(struct bootp_t));



    if (dhcp_msg_type == DHCPDISCOVER) {

        if (preq_addr.s_addr != htonl(0L)) {

            bc = request_addr(slirp, &preq_addr, client_ethaddr);

            if (bc) {

                daddr.sin_addr = preq_addr;

            }

        }

        if (!bc) {

         new_addr:

            bc = get_new_addr(slirp, &daddr.sin_addr, client_ethaddr);

            if (!bc) {

                DPRINTF("no address left\n");

                return;

            }

        }

        memcpy(bc->macaddr, client_ethaddr, ETH_ALEN);

    } else if (preq_addr.s_addr != htonl(0L)) {

        bc = request_addr(slirp, &preq_addr, client_ethaddr);

        if (bc) {

            daddr.sin_addr = preq_addr;

            memcpy(bc->macaddr, client_ethaddr, ETH_ALEN);

        } else {

            /* DHCPNAKs should be sent to broadcast */

            daddr.sin_addr.s_addr = 0xffffffff;

        }

    } else {

        bc = find_addr(slirp, &daddr.sin_addr, bp->bp_hwaddr);

        if (!bc) {

            /* if never assigned, behaves as if it was already

               assigned (windows fix because it remembers its address) */

            goto new_addr;

        }

    }



    /* Update ARP table for this IP address */

    arp_table_add(slirp, daddr.sin_addr.s_addr, client_ethaddr);



    saddr.sin_addr = slirp->vhost_addr;

    saddr.sin_port = htons(BOOTP_SERVER);



    daddr.sin_port = htons(BOOTP_CLIENT);



    rbp->bp_op = BOOTP_REPLY;

    rbp->bp_xid = bp->bp_xid;

    rbp->bp_htype = 1;

    rbp->bp_hlen = 6;

    memcpy(rbp->bp_hwaddr, bp->bp_hwaddr, ETH_ALEN);



    rbp->bp_yiaddr = daddr.sin_addr; /* Client IP address */

    rbp->bp_siaddr = saddr.sin_addr; /* Server IP address */



    q = rbp->bp_vend;

    memcpy(q, rfc1533_cookie, 4);

    q += 4;



    if (bc) {

        DPRINTF("%s addr=%08" PRIx32 "\n",

                (dhcp_msg_type == DHCPDISCOVER) ? "offered" : "ack'ed",

                ntohl(daddr.sin_addr.s_addr));



        if (dhcp_msg_type == DHCPDISCOVER) {

            *q++ = RFC2132_MSG_TYPE;

            *q++ = 1;

            *q++ = DHCPOFFER;

        } else /* DHCPREQUEST */ {

            *q++ = RFC2132_MSG_TYPE;

            *q++ = 1;

            *q++ = DHCPACK;

        }



        if (slirp->bootp_filename)

            snprintf((char *)rbp->bp_file, sizeof(rbp->bp_file), "%s",

                     slirp->bootp_filename);



        *q++ = RFC2132_SRV_ID;

        *q++ = 4;

        memcpy(q, &saddr.sin_addr, 4);

        q += 4;



        *q++ = RFC1533_NETMASK;

        *q++ = 4;

        memcpy(q, &slirp->vnetwork_mask, 4);

        q += 4;



        if (!slirp->restricted) {

            *q++ = RFC1533_GATEWAY;

            *q++ = 4;

            memcpy(q, &saddr.sin_addr, 4);

            q += 4;



            *q++ = RFC1533_DNS;

            *q++ = 4;

            memcpy(q, &slirp->vnameserver_addr, 4);

            q += 4;

        }



        *q++ = RFC2132_LEASE_TIME;

        *q++ = 4;

        val = htonl(LEASE_TIME);

        memcpy(q, &val, 4);

        q += 4;



        if (*slirp->client_hostname) {

            val = strlen(slirp->client_hostname);

            *q++ = RFC1533_HOSTNAME;

            *q++ = val;

            memcpy(q, slirp->client_hostname, val);

            q += val;

        }



        if (slirp->vdnssearch) {

            size_t spaceleft = sizeof(rbp->bp_vend) - (q - rbp->bp_vend);

            val = slirp->vdnssearch_len;

            if (val + 1 > spaceleft) {

                g_warning("DHCP packet size exceeded, "

                    "omitting domain-search option.");

            } else {

                memcpy(q, slirp->vdnssearch, val);

                q += val;

            }

        }

    } else {

        static const char nak_msg[] = "requested address not available";



        DPRINTF("nak'ed addr=%08" PRIx32 "\n", ntohl(preq_addr.s_addr));



        *q++ = RFC2132_MSG_TYPE;

        *q++ = 1;

        *q++ = DHCPNAK;



        *q++ = RFC2132_MESSAGE;

        *q++ = sizeof(nak_msg) - 1;

        memcpy(q, nak_msg, sizeof(nak_msg) - 1);

        q += sizeof(nak_msg) - 1;

    }

    *q = RFC1533_END;



    daddr.sin_addr.s_addr = 0xffffffffu;



    m->m_len = sizeof(struct bootp_t) -

        sizeof(struct ip) - sizeof(struct udphdr);

    udp_output2(NULL, m, &saddr, &daddr, IPTOS_LOWDELAY);

}

static void bootp_reply(Slirp *slirp, const struct bootp_t *bp)

{

    BOOTPClient *bc = NULL;

    struct mbuf *m;

    struct bootp_t *rbp;

    struct sockaddr_in saddr, daddr;

    struct in_addr preq_addr;

    int dhcp_msg_type, val;

    uint8_t *q;

    uint8_t client_ethaddr[ETH_ALEN];



    

    dhcp_decode(bp, &dhcp_msg_type, &preq_addr);

    DPRINTF("bootp packet op=%d msgtype=%d", bp->bp_op, dhcp_msg_type);

    if (preq_addr.s_addr != htonl(0L))

        DPRINTF(" req_addr=%08" PRIx32 "\n", ntohl(preq_addr.s_addr));

    else

        DPRINTF("\n");



    if (dhcp_msg_type == 0)

        dhcp_msg_type = DHCPREQUEST; 



    if (dhcp_msg_type != DHCPDISCOVER &&

        dhcp_msg_type != DHCPREQUEST)

        return;



    

    memcpy(client_ethaddr, bp->bp_hwaddr, ETH_ALEN);



    m = m_get(slirp);

    if (!m) {

        return;

    }

    m->m_data += IF_MAXLINKHDR;

    rbp = (struct bootp_t *)m->m_data;

    m->m_data += sizeof(struct udpiphdr);

    memset(rbp, 0, sizeof(struct bootp_t));



    if (dhcp_msg_type == DHCPDISCOVER) {

        if (preq_addr.s_addr != htonl(0L)) {

            bc = request_addr(slirp, &preq_addr, client_ethaddr);

            if (bc) {

                daddr.sin_addr = preq_addr;

            }

        }

        if (!bc) {

         new_addr:

            bc = get_new_addr(slirp, &daddr.sin_addr, client_ethaddr);

            if (!bc) {

                DPRINTF("no address left\n");

                return;

            }

        }

        memcpy(bc->macaddr, client_ethaddr, ETH_ALEN);

    } else if (preq_addr.s_addr != htonl(0L)) {

        bc = request_addr(slirp, &preq_addr, client_ethaddr);

        if (bc) {

            daddr.sin_addr = preq_addr;

            memcpy(bc->macaddr, client_ethaddr, ETH_ALEN);

        } else {

            

            daddr.sin_addr.s_addr = 0xffffffff;

        }

    } else {

        bc = find_addr(slirp, &daddr.sin_addr, bp->bp_hwaddr);

        if (!bc) {

            



            goto new_addr;

        }

    }



    

    arp_table_add(slirp, daddr.sin_addr.s_addr, client_ethaddr);



    saddr.sin_addr = slirp->vhost_addr;

    saddr.sin_port = htons(BOOTP_SERVER);



    daddr.sin_port = htons(BOOTP_CLIENT);



    rbp->bp_op = BOOTP_REPLY;

    rbp->bp_xid = bp->bp_xid;

    rbp->bp_htype = 1;

    rbp->bp_hlen = 6;

    memcpy(rbp->bp_hwaddr, bp->bp_hwaddr, ETH_ALEN);



    rbp->bp_yiaddr = daddr.sin_addr; 

    rbp->bp_siaddr = saddr.sin_addr; 



    q = rbp->bp_vend;

    memcpy(q, rfc1533_cookie, 4);

    q += 4;



    if (bc) {

        DPRINTF("%s addr=%08" PRIx32 "\n",

                (dhcp_msg_type == DHCPDISCOVER) ? "offered" : "ack'ed",

                ntohl(daddr.sin_addr.s_addr));



        if (dhcp_msg_type == DHCPDISCOVER) {

            *q++ = RFC2132_MSG_TYPE;

            *q++ = 1;

            *q++ = DHCPOFFER;

        } else  {

            *q++ = RFC2132_MSG_TYPE;

            *q++ = 1;

            *q++ = DHCPACK;

        }



        if (slirp->bootp_filename)

            snprintf((char *)rbp->bp_file, sizeof(rbp->bp_file), "%s",

                     slirp->bootp_filename);



        *q++ = RFC2132_SRV_ID;

        *q++ = 4;

        memcpy(q, &saddr.sin_addr, 4);

        q += 4;



        *q++ = RFC1533_NETMASK;

        *q++ = 4;

        memcpy(q, &slirp->vnetwork_mask, 4);

        q += 4;



        if (!slirp->restricted) {

            *q++ = RFC1533_GATEWAY;

            *q++ = 4;

            memcpy(q, &saddr.sin_addr, 4);

            q += 4;



            *q++ = RFC1533_DNS;

            *q++ = 4;

            memcpy(q, &slirp->vnameserver_addr, 4);

            q += 4;

        }



        *q++ = RFC2132_LEASE_TIME;

        *q++ = 4;

        val = htonl(LEASE_TIME);

        memcpy(q, &val, 4);

        q += 4;



        if (*slirp->client_hostname) {

            val = strlen(slirp->client_hostname);

            *q++ = RFC1533_HOSTNAME;

            *q++ = val;

            memcpy(q, slirp->client_hostname, val);

            q += val;

        }



        if (slirp->vdnssearch) {

            size_t spaceleft = sizeof(rbp->bp_vend) - (q - rbp->bp_vend);

            val = slirp->vdnssearch_len;

            if (val + 1 > spaceleft) {

                g_warning("DHCP packet size exceeded, "

                    "omitting domain-search option.");

            } else {

                memcpy(q, slirp->vdnssearch, val);

                q += val;

            }

        }

    } else {

        static const char nak_msg[] = "requested address not available";



        DPRINTF("nak'ed addr=%08" PRIx32 "\n", ntohl(preq_addr.s_addr));



        *q++ = RFC2132_MSG_TYPE;

        *q++ = 1;

        *q++ = DHCPNAK;



        *q++ = RFC2132_MESSAGE;

        *q++ = sizeof(nak_msg) - 1;

        memcpy(q, nak_msg, sizeof(nak_msg) - 1);

        q += sizeof(nak_msg) - 1;

    }

    *q = RFC1533_END;



    daddr.sin_addr.s_addr = 0xffffffffu;



    m->m_len = sizeof(struct bootp_t) -

        sizeof(struct ip) - sizeof(struct udphdr);

    udp_output2(NULL, m, &saddr, &daddr, IPTOS_LOWDELAY);

}

static void FUNC_0(Slirp *VAR_0, const struct bootp_t *VAR_1)

{

    BOOTPClient *bc = NULL;

    struct mbuf *VAR_2;

    struct bootp_t *VAR_3;

    struct sockaddr_in VAR_4, VAR_5;

    struct in_addr VAR_6;

    int VAR_7, VAR_8;

    uint8_t *q;

    uint8_t client_ethaddr[ETH_ALEN];



    

    dhcp_decode(VAR_1, &VAR_7, &VAR_6);

    DPRINTF("bootp packet op=%d msgtype=%d", VAR_1->bp_op, VAR_7);

    if (VAR_6.s_addr != htonl(0L))

        DPRINTF(" req_addr=%08" PRIx32 "\n", ntohl(VAR_6.s_addr));

    else

        DPRINTF("\n");



    if (VAR_7 == 0)

        VAR_7 = DHCPREQUEST; 



    if (VAR_7 != DHCPDISCOVER &&

        VAR_7 != DHCPREQUEST)

        return;



    

    memcpy(client_ethaddr, VAR_1->bp_hwaddr, ETH_ALEN);



    VAR_2 = m_get(VAR_0);

    if (!VAR_2) {

        return;

    }

    VAR_2->m_data += IF_MAXLINKHDR;

    VAR_3 = (struct bootp_t *)VAR_2->m_data;

    VAR_2->m_data += sizeof(struct udpiphdr);

    memset(VAR_3, 0, sizeof(struct bootp_t));



    if (VAR_7 == DHCPDISCOVER) {

        if (VAR_6.s_addr != htonl(0L)) {

            bc = request_addr(VAR_0, &VAR_6, client_ethaddr);

            if (bc) {

                VAR_5.sin_addr = VAR_6;

            }

        }

        if (!bc) {

         new_addr:

            bc = get_new_addr(VAR_0, &VAR_5.sin_addr, client_ethaddr);

            if (!bc) {

                DPRINTF("no address left\n");

                return;

            }

        }

        memcpy(bc->macaddr, client_ethaddr, ETH_ALEN);

    } else if (VAR_6.s_addr != htonl(0L)) {

        bc = request_addr(VAR_0, &VAR_6, client_ethaddr);

        if (bc) {

            VAR_5.sin_addr = VAR_6;

            memcpy(bc->macaddr, client_ethaddr, ETH_ALEN);

        } else {

            

            VAR_5.sin_addr.s_addr = 0xffffffff;

        }

    } else {

        bc = find_addr(VAR_0, &VAR_5.sin_addr, VAR_1->bp_hwaddr);

        if (!bc) {

            



            goto new_addr;

        }

    }



    

    arp_table_add(VAR_0, VAR_5.sin_addr.s_addr, client_ethaddr);



    VAR_4.sin_addr = VAR_0->vhost_addr;

    VAR_4.sin_port = htons(BOOTP_SERVER);



    VAR_5.sin_port = htons(BOOTP_CLIENT);



    VAR_3->bp_op = BOOTP_REPLY;

    VAR_3->bp_xid = VAR_1->bp_xid;

    VAR_3->bp_htype = 1;

    VAR_3->bp_hlen = 6;

    memcpy(VAR_3->bp_hwaddr, VAR_1->bp_hwaddr, ETH_ALEN);



    VAR_3->bp_yiaddr = VAR_5.sin_addr; 

    VAR_3->bp_siaddr = VAR_4.sin_addr; 



    q = VAR_3->bp_vend;

    memcpy(q, rfc1533_cookie, 4);

    q += 4;



    if (bc) {

        DPRINTF("%s addr=%08" PRIx32 "\n",

                (VAR_7 == DHCPDISCOVER) ? "offered" : "ack'ed",

                ntohl(VAR_5.sin_addr.s_addr));



        if (VAR_7 == DHCPDISCOVER) {

            *q++ = RFC2132_MSG_TYPE;

            *q++ = 1;

            *q++ = DHCPOFFER;

        } else  {

            *q++ = RFC2132_MSG_TYPE;

            *q++ = 1;

            *q++ = DHCPACK;

        }



        if (VAR_0->bootp_filename)

            snprintf((char *)VAR_3->bp_file, sizeof(VAR_3->bp_file), "%s",

                     VAR_0->bootp_filename);



        *q++ = RFC2132_SRV_ID;

        *q++ = 4;

        memcpy(q, &VAR_4.sin_addr, 4);

        q += 4;



        *q++ = RFC1533_NETMASK;

        *q++ = 4;

        memcpy(q, &VAR_0->vnetwork_mask, 4);

        q += 4;



        if (!VAR_0->restricted) {

            *q++ = RFC1533_GATEWAY;

            *q++ = 4;

            memcpy(q, &VAR_4.sin_addr, 4);

            q += 4;



            *q++ = RFC1533_DNS;

            *q++ = 4;

            memcpy(q, &VAR_0->vnameserver_addr, 4);

            q += 4;

        }



        *q++ = RFC2132_LEASE_TIME;

        *q++ = 4;

        VAR_8 = htonl(LEASE_TIME);

        memcpy(q, &VAR_8, 4);

        q += 4;



        if (*VAR_0->client_hostname) {

            VAR_8 = strlen(VAR_0->client_hostname);

            *q++ = RFC1533_HOSTNAME;

            *q++ = VAR_8;

            memcpy(q, VAR_0->client_hostname, VAR_8);

            q += VAR_8;

        }



        if (VAR_0->vdnssearch) {

            size_t spaceleft = sizeof(VAR_3->bp_vend) - (q - VAR_3->bp_vend);

            VAR_8 = VAR_0->vdnssearch_len;

            if (VAR_8 + 1 > spaceleft) {

                g_warning("DHCP packet size exceeded, "

                    "omitting domain-search option.");

            } else {

                memcpy(q, VAR_0->vdnssearch, VAR_8);

                q += VAR_8;

            }

        }

    } else {

        static const char VAR_9[] = "requested address not available";



        DPRINTF("nak'ed addr=%08" PRIx32 "\n", ntohl(VAR_6.s_addr));



        *q++ = RFC2132_MSG_TYPE;

        *q++ = 1;

        *q++ = DHCPNAK;



        *q++ = RFC2132_MESSAGE;

        *q++ = sizeof(VAR_9) - 1;

        memcpy(q, VAR_9, sizeof(VAR_9) - 1);

        q += sizeof(VAR_9) - 1;

    }

    *q = RFC1533_END;



    VAR_5.sin_addr.s_addr = 0xffffffffu;



    VAR_2->m_len = sizeof(struct bootp_t) -

        sizeof(struct ip) - sizeof(struct udphdr);

    udp_output2(NULL, VAR_2, &VAR_4, &VAR_5, IPTOS_LOWDELAY);

}

static void FUNC_0(Slirp *VAR_0, const struct bootp_t *VAR_1)
{ BOOTPClient *bc = NULL; struct mbuf *VAR_2; struct bootp_t *VAR_3; struct sockaddr_in VAR_4, VAR_5; struct in_addr VAR_6; int VAR_7, VAR_8; uint8_t *q; uint8_t client_ethaddr[ETH_ALEN]; dhcp_decode(VAR_1, &VAR_7, &VAR_6); DPRINTF("bootp packet op=%d msgtype=%d", VAR_1->bp_op, VAR_7); if (VAR_6.s_addr != htonl(0L))
DPRINTF(" req_addr=%08" PRIx32 "\n", ntohl(VAR_6.s_addr)); else
DPRINTF("\n"); if (VAR_7 == 0)
VAR_7 = DHCPREQUEST; if (VAR_7 != DHCPDISCOVER &&
VAR_7 != DHCPREQUEST)
return; memcpy(client_ethaddr, VAR_1->bp_hwaddr, ETH_ALEN); VAR_2 = m_get(VAR_0); if (!VAR_2) { return; } VAR_2->m_data += IF_MAXLINKHDR; VAR_3 = (struct bootp_t *)VAR_2->m_data; VAR_2->m_data += sizeof(struct udpiphdr); memset(VAR_3, 0, sizeof(struct bootp_t)); if (VAR_7 == DHCPDISCOVER) { if (VAR_6.s_addr != htonl(0L)) { bc = request_addr(VAR_0, &VAR_6, client_ethaddr); if (bc) { VAR_5.sin_addr = VAR_6; } } if (!bc) { new_addr:
bc = get_new_addr(VAR_0, &VAR_5.sin_addr, client_ethaddr); if (!bc) { DPRINTF("no address left\n"); return; } } memcpy(bc->macaddr, client_ethaddr, ETH_ALEN); } else if (VAR_6.s_addr != htonl(0L)) { bc = request_addr(VAR_0, &VAR_6, client_ethaddr); if (bc) { VAR_5.sin_addr = VAR_6; memcpy(bc->macaddr, client_ethaddr, ETH_ALEN); } else { VAR_5.sin_addr.s_addr = 0xffffffff; } } else { bc = find_addr(VAR_0, &VAR_5.sin_addr, VAR_1->bp_hwaddr); if (!bc) { goto new_addr; } } arp_table_add(VAR_0, VAR_5.sin_addr.s_addr, client_ethaddr); VAR_4.sin_addr = VAR_0->vhost_addr; VAR_4.sin_port = htons(BOOTP_SERVER); VAR_5.sin_port = htons(BOOTP_CLIENT); VAR_3->bp_op = BOOTP_REPLY; VAR_3->bp_xid = VAR_1->bp_xid; VAR_3->bp_htype = 1; VAR_3->bp_hlen = 6; memcpy(VAR_3->bp_hwaddr, VAR_1->bp_hwaddr, ETH_ALEN); VAR_3->bp_yiaddr = VAR_5.sin_addr; VAR_3->bp_siaddr = VAR_4.sin_addr; q = VAR_3->bp_vend; memcpy(q, rfc1533_cookie, 4); q += 4; if (bc) { DPRINTF("%s addr=%08" PRIx32 "\n",
(VAR_7 == DHCPDISCOVER) ? "offered" : "ack'ed",
ntohl(VAR_5.sin_addr.s_addr)); if (VAR_7 == DHCPDISCOVER) { *q++ = RFC2132_MSG_TYPE; *q++ = 1; *q++ = DHCPOFFER; } else  { *q++ = RFC2132_MSG_TYPE; *q++ = 1; *q++ = DHCPACK; } if (VAR_0->bootp_filename)
snprintf((char *)VAR_3->bp_file, sizeof(VAR_3->bp_file), "%s",
VAR_0->bootp_filename); *q++ = RFC2132_SRV_ID; *q++ = 4; memcpy(q, &VAR_4.sin_addr, 4); q += 4; *q++ = RFC1533_NETMASK; *q++ = 4; memcpy(q, &VAR_0->vnetwork_mask, 4); q += 4; if (!VAR_0->restricted) { *q++ = RFC1533_GATEWAY; *q++ = 4; memcpy(q, &VAR_4.sin_addr, 4); q += 4; *q++ = RFC1533_DNS; *q++ = 4; memcpy(q, &VAR_0->vnameserver_addr, 4); q += 4; } *q++ = RFC2132_LEASE_TIME; *q++ = 4; VAR_8 = htonl(LEASE_TIME); memcpy(q, &VAR_8, 4); q += 4; if (*VAR_0->client_hostname) { VAR_8 = strlen(VAR_0->client_hostname); *q++ = RFC1533_HOSTNAME; *q++ = VAR_8; memcpy(q, VAR_0->client_hostname, VAR_8); q += VAR_8; } if (VAR_0->vdnssearch) { size_t spaceleft = sizeof(VAR_3->bp_vend) - (q - VAR_3->bp_vend); VAR_8 = VAR_0->vdnssearch_len; if (VAR_8 + 1 > spaceleft) { g_warning("DHCP packet size exceeded, "
"omitting domain-search option."); } else { memcpy(q, VAR_0->vdnssearch, VAR_8); q += VAR_8; } } } else { static const char VAR_9[] = "requested address not available"; DPRINTF("nak'ed addr=%08" PRIx32 "\n", ntohl(VAR_6.s_addr)); *q++ = RFC2132_MSG_TYPE; *q++ = 1; *q++ = DHCPNAK; *q++ = RFC2132_MESSAGE; *q++ = sizeof(VAR_9) - 1; memcpy(q, VAR_9, sizeof(VAR_9) - 1); q += sizeof(VAR_9) - 1; } *q = RFC1533_END; VAR_5.sin_addr.s_addr = 0xffffffffu; VAR_2->m_len = sizeof(struct bootp_t) -
sizeof(struct ip) - sizeof(struct udphdr); udp_output2(NULL, VAR_2, &VAR_4, &VAR_5, IPTOS_LOWDELAY); }