mirror of
https://git.FreeBSD.org/ports.git
synced 2024-11-14 23:46:10 +00:00
b98a2e6435
interface stuff (and if_var.h). Closes pr3161 Submitted by: MIHIRA Yoshiro <sanpei@yy.cs.keio.ac.jp> Obtained from: pr3161
164 lines
3.9 KiB
Plaintext
164 lines
3.9 KiB
Plaintext
--- client/dhcpc.c.orig Fri Nov 3 01:40:40 1995
|
|
+++ client/dhcpc.c Thu Mar 27 15:11:20 1997
|
|
@@ -53,6 +53,12 @@
|
|
#ifndef sun
|
|
#include <net/bpf.h>
|
|
#endif
|
|
+#ifdef __FreeBSD__
|
|
+#include <osreldate.h>
|
|
+#if (__FreeBSD_version == 199702) || (__FreeBSD_version >= 300000)
|
|
+#include <net/if_var.h>
|
|
+#endif
|
|
+#endif
|
|
#include <netinet/in.h>
|
|
#include <netinet/in_systm.h>
|
|
#include <netinet/if_ether.h>
|
|
@@ -86,6 +92,7 @@
|
|
struct dhcp_reqspec reqspec;
|
|
struct if_info intface;
|
|
struct dhcp_param *param_list;
|
|
+int f_resolv, f_hostname;
|
|
|
|
int (*fsm[MAX_STATES])();
|
|
|
|
@@ -227,6 +234,14 @@
|
|
((brdaddr.s_addr != 0) ? &brdaddr : NULL)) != 1) {
|
|
set_route(paramp);
|
|
}
|
|
+#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) < DFLTBOOTPLEN + UDPHL + IPHL)
|
|
- return(0);
|
|
- if (ntohs(rcv.udp->uh_ulen) < DFLTBOOTPLEN + 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) < DFLTBOOTPLEN + UDPHL + IPHL)
|
|
- return(0);
|
|
- if (ntohs(rcv.udp->uh_ulen) < DFLTBOOTPLEN + 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 &&
|
|
@@ -1740,7 +1741,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);
|
|
}
|
|
|
|
@@ -1760,17 +1765,42 @@
|
|
{
|
|
int debug = 0;
|
|
int n = 0;
|
|
+ int count;
|
|
+ FILE *pid_file;
|
|
struct if_info ifinfo;
|
|
+#ifdef __FreeBSD__
|
|
+ char pid_filename[MAXPATHLEN];
|
|
+#endif
|
|
|
|
bzero(&reqspec, sizeof(reqspec));
|
|
bzero(&ifinfo, sizeof(ifinfo));
|
|
+#ifdef __FreeBSD__
|
|
+#define COM_OPTS "vdrn"
|
|
+#else
|
|
+#define COM_OPTS "vd"
|
|
+#endif
|
|
+
|
|
if (argc < 2) usage();
|
|
- --argc, ++argv;
|
|
- if (argv[0][0] == '-' && argv[0][1] == 'v') version();
|
|
- if (argv[0][0] == '-' && argv[0][1] == 'd') {
|
|
- debug = 1;
|
|
- --argc, ++argv;
|
|
+
|
|
+ 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]);
|
|
@@ -1790,6 +1820,19 @@
|
|
close(n);
|
|
}
|
|
}
|
|
+ /* initialization works well, so recored its own pid */
|
|
+#ifdef __FreeBSD__
|
|
+ strncpy(pid_filename, PATH_PID, MAXPATHLEN);
|
|
+ strncat(pid_filename, "/dhcpc.", (MAXPATHLEN - strlen(pid_filename)));
|
|
+ strncat(pid_filename, ifinfo.name, (MAXPATHLEN - strlen(pid_filename)));
|
|
+ strncat(pid_filename, ".pid", (MAXPATHLEN - strlen(pid_filename)));
|
|
+ if ((pid_file = fopen(pid_filename, "w")) != NULL) {
|
|
+#else
|
|
+ if ((pid_file = fopen(PATH_PID, "w")) != NULL) {
|
|
+#endif
|
|
+ fprintf(pid_file, "%d\n", (int) getpid());
|
|
+ fclose(pid_file);
|
|
+ }
|
|
|
|
/*
|
|
* set request specification
|
|
@@ -1802,6 +1845,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
|
|
|
|
return(dhcp_client(&ifinfo));
|
|
}
|