--- client/dhcpc.c.orig Mon Jul 7 17:08:35 1997 +++ client/dhcpc.c Wed Apr 22 01:34:39 1998 @@ -53,6 +53,12 @@ #ifndef sun #include #endif +#ifdef __FreeBSD__ +#include +#if (__FreeBSD_version == 199702) || (__FreeBSD_version >= 300000) +#include +#endif +#endif #include #include #include @@ -82,6 +88,7 @@ struct dhcp_reqspec reqspec; struct if_info intface; struct dhcp_param *param_list; +int f_resolv, f_hostname; char pid_filename[MAXPATHLEN]; int (*fsm[MAX_STATES])(); @@ -227,6 +234,14 @@ (void) sndcamt(); #endif } +#ifdef __FreeBSD__ + if (f_resolv) { + set_resolv(param_list); + } + if (f_hostname) { + set_hostname(param_list); + } +#endif #endif return; @@ -264,15 +279,8 @@ /* * split conditions into pieces for debugging */ -#ifndef sun - if (ntohs(rcv.ip->ip_len) < MINDHCPLEN + UDPHL + IPHL) - return(0); - if (ntohs(rcv.udp->uh_ulen) < MINDHCPLEN + UDPHL) - return(0); -#else if (rcv.udp->uh_dport != dhcpc_port) return(0); -#endif if (ripcksum != cksum((u_short *) rcv.ip, rcv.ip->ip_hl * 2)) return(0); if (rcv.udp->uh_sum != 0 && @@ -321,15 +329,8 @@ /* * split conditions into pieces for debugging */ -#ifndef sun - if (ntohs(rcv.ip->ip_len) < MINDHCPLEN + UDPHL + IPHL) - return(0); - if (ntohs(rcv.udp->uh_ulen) < MINDHCPLEN + UDPHL) - return(0); -#else if (rcv.udp->uh_dport != dhcpc_port) return(0); -#endif if (ripcksum != cksum((u_short *) rcv.ip, rcv.ip->ip_hl * 2)) return(0); if (rcv.udp->uh_sum != 0 && @@ -1761,7 +1762,11 @@ void usage() { - fprintf(stderr, "Usage: dhcpc [-d] if_name\n"); +#ifdef __FreeBSD__ + fprintf(stderr, "Usage: dhcpc [-v] [-drn] if_name\n"); +#else + fprintf(stderr, "Usage: dhcpc [-v] [-d] if_name\n"); +#endif exit(1); } @@ -1781,26 +1786,38 @@ { int debug = 0; int n = 0; + int count; struct if_info ifinfo; bzero(&reqspec, sizeof(reqspec)); bzero(&ifinfo, sizeof(ifinfo)); +#ifdef __FreeBSD__ +#define COM_OPTS "vdrn" +#else +#define COM_OPTS "vd" +#endif - while (*++argv && argv[0][0] == '-') { - switch (argv[0][1]) { - case 'v': - version(); - break; - case 'd': - debug = 1; - break; - default: - usage(); - break; - } - } - if (argv[0] == NULL) usage(); - + while ((count = getopt(argc, argv, COM_OPTS)) != EOF) { + switch (count) { + case 'v': + version(); + case 'd': + debug = 1; + break; +#ifdef __FreeBSD__ + case 'r': + f_resolv = 1; + break; + case 'n': + f_hostname = 1; + break; +#endif + } + } + argc -= optind; + argv += optind; + + if (argc < 1) usage(); strcpy(ifinfo.name, argv[0]); /* @@ -1831,6 +1848,11 @@ reqspec.reqlist.list[reqspec.reqlist.len++] = SUBNET_MASK; reqspec.reqlist.list[reqspec.reqlist.len++] = ROUTER; reqspec.reqlist.list[reqspec.reqlist.len++] = BRDCAST_ADDR; +#ifdef __FreeBSD__ + reqspec.reqlist.list[reqspec.reqlist.len++] = DNS_DOMAIN; + reqspec.reqlist.list[reqspec.reqlist.len++] = DNS_SERVER; + reqspec.reqlist.list[reqspec.reqlist.len++] = HOSTNAME; +#endif n = dhcp_client(&ifinfo); unlink(pid_filename);