Magellan Linux

Diff of /trunk/mkinitrd-magellan/klibc/usr/kinit/ipconfig/dhcp_proto.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 814 by niro, Sat Sep 1 22:45:15 2007 UTC revision 815 by niro, Fri Apr 24 18:32:46 2009 UTC
# Line 71  static struct iovec dhcp_request_iov[] = Line 71  static struct iovec dhcp_request_iov[] =
71    
72  /*  /*
73   * Parse a DHCP response packet   * Parse a DHCP response packet
74     * Returns:
75     * 0 = Not handled
76     * 2 = DHCPOFFER (from dhcp_proto.h)
77     * 5 = DHCPACK
78     * 6 = DHCPNACK
79   */   */
80  static int  static int dhcp_parse(struct netdev *dev, struct bootp_hdr *hdr,
81  dhcp_parse(struct netdev *dev, struct bootp_hdr *hdr, uint8_t * exts, int extlen)        uint8_t * exts, int extlen)
82  {  {
83   uint8_t type = 0;   uint8_t type = 0;
84   uint32_t serverid = INADDR_NONE;   uint32_t serverid = INADDR_NONE;
# Line 101  dhcp_parse(struct netdev *dev, struct bo Line 106  dhcp_parse(struct netdev *dev, struct bo
106    
107   switch (type) {   switch (type) {
108   case DHCPOFFER:   case DHCPOFFER:
109   ret = bootp_parse(dev, hdr, exts, extlen);   ret = bootp_parse(dev, hdr, exts, extlen) ? DHCPOFFER : 0;
110   if (ret == 1 && serverid != INADDR_NONE)   if (ret == DHCPOFFER && serverid != INADDR_NONE)
111   dev->serverid = serverid;   dev->serverid = serverid;
112   DEBUG(("\n   dhcp offer\n"));   DEBUG(("\n   dhcp offer\n"));
113   break;   break;
114    
115   case DHCPACK:   case DHCPACK:
116   ret = bootp_parse(dev, hdr, exts, extlen);   ret = bootp_parse(dev, hdr, exts, extlen) ? DHCPACK : 0;
117   DEBUG(("\n   dhcp ack\n"));   DEBUG(("\n   dhcp ack\n"));
118   break;   break;
119    
120   case DHCPNAK:   case DHCPNAK:
121   ret = 2;   ret = DHCPNAK;
122   DEBUG(("\n   dhcp nak\n"));   DEBUG(("\n   dhcp nak\n"));
123   break;   break;
124   }   }
# Line 122  dhcp_parse(struct netdev *dev, struct bo Line 127  dhcp_parse(struct netdev *dev, struct bo
127    
128  /*  /*
129   * Receive and parse a DHCP packet   * Receive and parse a DHCP packet
130     * Returns:
131     *-1 = Error in packet_recv
132     * 0 = Not handled
133     * 2 = DHCPOFFER (from dhcp_proto.h)
134     * 5 = DHCPACK
135     * 6 = DHCPNACK
136   */   */
137  static int dhcp_recv(struct netdev *dev)  static int dhcp_recv(struct netdev *dev)
138  {  {
# Line 140  static int dhcp_recv(struct netdev *dev) Line 151  static int dhcp_recv(struct netdev *dev)
151    
152   DEBUG(("\n   dhcp xid %08x ", dev->bootp.xid));   DEBUG(("\n   dhcp xid %08x ", dev->bootp.xid));
153    
154   if (ret < sizeof(struct bootp_hdr) || bootp.op != BOOTP_REPLY || /* RFC951 7.5 */   if (ret < sizeof(struct bootp_hdr) || bootp.op != BOOTP_REPLY ||
155      bootp.xid != dev->bootp.xid ||      /* RFC951 7.5 */ bootp.xid != dev->bootp.xid ||
156      memcmp(bootp.chaddr, dev->hwaddr, 16))      memcmp(bootp.chaddr, dev->hwaddr, 16))
157   return 0;   return 0;
158    
# Line 161  static int dhcp_send(struct netdev *dev, Line 172  static int dhcp_send(struct netdev *dev,
172   bootp.hlen = dev->hwlen;   bootp.hlen = dev->hwlen;
173   bootp.xid = dev->bootp.xid;   bootp.xid = dev->bootp.xid;
174   bootp.ciaddr = dev->ip_addr;   bootp.ciaddr = dev->ip_addr;
175   bootp.giaddr = dev->bootp.gateway;   bootp.giaddr = INADDR_ANY;
176   bootp.secs = htons(time(NULL) - dev->open_time);   bootp.secs = htons(time(NULL) - dev->open_time);
177   memcpy(bootp.chaddr, dev->hwaddr, 16);   memcpy(bootp.chaddr, dev->hwaddr, 16);
178    

Legend:
Removed from v.814  
changed lines
  Added in v.815