dhclient/dhclient.conf change in -CURRENT? (fwd)
Larry Rosenman
ler at lerctr.org
Mon Aug 4 18:35:10 PDT 2003
Forwarding to the list...
------------ Forwarded Message ------------
Date: Monday, August 04, 2003 20:18:28 -0500
From: Larry Rosenman <ler at lerctr.org>
To: Martin Blapp <mb at imp.ch>
Cc:
Subject: Re: dhclient/dhclient.conf change in -CURRENT?
It did ****NOT**** do the right thing at boot. I did run it with -d -v and
got the following....
Script started on Mon Aug 4 20:13:21 2003
lerlaptop# dhclient -d -v wi0
Internet Software Consortium DHCP Client V3.0.1rc11
Copyright 1995-2002 Internet Software Consortium.
All rights reserved.
For info, please visit http://www.isc.org/products/DHCP
Listening on BPF/wi0/00:06:25:18:1a:37
Sending on BPF/wi0/00:06:25:18:1a:37
Sending on Socket/fallback
DHCPREQUEST on wi0 to 255.255.255.255 port 67
DHCPREQUEST on wi0 to 255.255.255.255 port 67
Trying medium "wepmode off ssid 'rednet' wepkey 1:- wepkey 2:- wepkey 3:-
wepkey 4:- " 1 DHCPDISCOVER on wi0 to 255.255.255.255 port 67 interval 6
Trying medium "wepmode off ssid 'IA-01' wepkey 1:- wepkey 2:- wepkey 3:-
wepkey 4:-" 0 DHCPDISCOVER on wi0 to 255.255.255.255 port 67 interval 6
Trying medium "wepmode off ssid 'LERCTR NETWORK' wepkey 1:- wepkey 2:-
wepkey 3:- wepkey 4:-" 0 DHCPDISCOVER on wi0 to 255.255.255.255 port 67
interval 6
DHCPREQUEST on wi0 to 255.255.255.255 port 67
Trying medium "wepmode off ssid 'rednet' wepkey 1:- wepkey 2:- wepkey 3:-
wepkey 4:- " 1 DHCPDISCOVER on wi0 to 255.255.255.255 port 67 interval 8
Trying medium "wepmode off ssid 'IA-01' wepkey 1:- wepkey 2:- wepkey 3:-
wepkey 4:-" 0 DHCPDISCOVER on wi0 to 255.255.255.255 port 67 interval 3
Trying medium "wepmode off ssid 'LERCTR NETWORK' wepkey 1:- wepkey 2:-
wepkey 3:- wepkey 4:-" 0 DHCPDISCOVER on wi0 to 255.255.255.255 port 67
interval 3
DHCPREQUEST on wi0 to 255.255.255.255 port 67
Trying medium "wepmode off ssid 'rednet' wepkey 1:- wepkey 2:- wepkey 3:-
wepkey 4:- " 1 DHCPDISCOVER on wi0 to 255.255.255.255 port 67 interval 9
DHCPREQUEST on wi0 to 255.255.255.255 port 67
Trying medium "wepmode off ssid 'IA-01' wepkey 1:- wepkey 2:- wepkey 3:-
wepkey 4:-" 0 DHCPDISCOVER on wi0 to 255.255.255.255 port 67 interval 9
Trying medium "wepmode off ssid 'LERCTR NETWORK' wepkey 1:- wepkey 2:-
wepkey 3:- wepkey 4:-" 0 DHCPDISCOVER on wi0 to 255.255.255.255 port 67
interval 3
DHCPOFFER from 207.158.72.11
DHCPREQUEST on wi0 to 255.255.255.255 port 67
DHCPACK from 207.158.72.11
bound to 207.158.72.14 -- renewal in 1087437530 seconds.
DHCPREQUEST on wi0 to 255.255.255.255 port 67
DHCPACK from 207.158.72.11
^Z
Suspended
lerlaptop# bg
[1] dhclient -d -v wi0 &
lerlaptop# ^D??exit
Script done on Mon Aug 4 20:15:28 2003
--On Tuesday, August 05, 2003 00:52:25 +0200 Martin Blapp <mb at imp.ch> wrote:
>
> Hi Larry,
>
> And here is a more correct version. It still has some issues.
>
> The sleep interval for dhclient after we lost a successful
> link is too big.
>
> Can you live with this solution ?
>
> Martin
>
> --- src/contrib/isc-dhcp/includes/dhcpd.h.orig Mon Aug 4 23:57:06 2003
> +++ src/contrib/isc-dhcp/includes/dhcpd.h Mon Aug 4 23:57:37 2003
> @@ -782,6 +782,7 @@
> char name [IFNAMSIZ]; /* Its name... */
> int linkstatus; /* Link status */
> int ieee802; /* True if media is ieee802 */
> + int mediaflag; /* True if dhclient.conf has media settings */
> int index; /* Its index. */
> int rfdesc; /* Its read file descriptor. */
> int wfdesc; /* Its write file descriptor, if
> --- src/contrib/isc-dhcp/client/dhclient.c.orig Tue Aug 5 00:42:37 2003
> +++ src/contrib/isc-dhcp/client/dhclient.c Tue Aug 5 00:45:05 2003
> @@ -257,7 +257,9 @@
> log_fatal ("%s: interface name too long (max %ld)",
> argv [i], (long)strlen (argv [i]));
> strlcpy (tmp -> name, argv [i], IFNAMSIZ);
> - set_ieee802(tmp);
> +#ifdef __FreeBSD__
> + set_ieee80211(tmp);
> +#endif
> tmp->linkstatus = interface_active(tmp);
> if (interfaces) {
> interface_reference (&tmp -> next,
> @@ -412,7 +414,14 @@
> INTERFACE_AUTOMATIC)) !=
> INTERFACE_REQUESTED))
> continue;
> - set_ieee802(ip);
> +#ifdef __FreeBSD__
> + set_ieee80211(ip);
> +#endif
> + if (ip -> client -> config -> media != NULL)
> + ip->mediaflag = 1;
> + else
> + ip->mediaflag = 0;
> +
> script_init (ip -> client,
> "PREINIT", (struct string_list *)0);
> if (ip -> client -> alias)
> @@ -1385,9 +1394,6 @@
> int interval;
> int increase = 1;
>
> - if (interface_active(client -> interface) == 0)
> - return;
> -
> /* Figure out how long it's been since we started transmitting. */
> interval = cur_time - client -> first_sending;
>
> @@ -1427,6 +1433,9 @@
> }
> }
>
> + if (interface_active(client -> interface) == 0)
> + return;
> +
> /* If we're supposed to increase the interval, do so. If it's
> currently zero (i.e., we haven't sent any packets yet), set
> it to one; otherwise, add to it a random number between
> @@ -3215,14 +3224,29 @@
> if (ifmr.ifm_status & IFM_AVALID) {
> if (ip->ieee802) {
> if ((IFM_TYPE(ifmr.ifm_active) == IFM_IEEE80211) &&
> - (ifmr.ifm_status & IFM_ACTIVE))
> + (ifmr.ifm_status & IFM_ACTIVE)) {
> + if (ip->mediaflag &&
> + ip -> client -> state != S_BOUND)
> + return (2);
> return (1);
> + }
> } else {
> - if (ifmr.ifm_status & IFM_ACTIVE)
> + if (ifmr.ifm_status & IFM_ACTIVE) {
> + if (ip->mediaflag &&
> + ip -> client -> state != S_BOUND)
> + return (2);
> return (1);
> + }
> }
> }
>
> + /*
> + * If dhclient.conf contains media settings, we cannot
> + * abort if the interface is not set to active mode.
> + */
> + if (ip->mediaflag && ip -> client -> state != S_BOUND)
> + return (1);
> +
> return (0);
> # else /* ifdef __FreeBSD__ */
>
> @@ -3231,7 +3255,7 @@
> }
>
> # ifdef __FreeBSD__
> -set_ieee802 (struct interface_info *ip) {
> +set_ieee80211 (struct interface_info *ip) {
>
> struct ieee80211req ireq;
> u_int8_t data[32];
> @@ -3273,6 +3297,7 @@
> {
> struct interface_info *ip;
> struct client_state *client;
> + int result;
>
> # ifdef DEBUG
> printf("Polling interface status\n");
> @@ -3312,11 +3337,19 @@
> ip->linkstatus = 0;
> }
> } else {
> - if (interface_active(ip) == 0) {
> + if ((result = interface_active(ip)) == 0) {
> # ifdef DEBUG
> printf("%s: Lost Link on interface\n", ip->name);
> # endif
> ip->linkstatus = 0;
> + }
> + if (result == 2) {
> + for (client = ip -> client;
> + client; client = client -> next) {
> + add_timeout(cur_time + random ()
> % 5, + state_reboot,
> client, 0, 0); + }
> + ip->linkstatus = 1;
> }
> }
> }
>
> Martin Blapp, <mb at imp.ch> <mbr at FreeBSD.org>
> ------------------------------------------------------------------
> ImproWare AG, UNIXSP & ISP, Zurlindenstrasse 29, 4133 Pratteln, CH
> Phone: +41 61 826 93 00 Fax: +41 61 826 93 01
> PGP: <finger -l mbr at freebsd.org>
> PGP Fingerprint: B434 53FC C87C FE7B 0A18 B84C 8686 EF22 D300 551E
> ------------------------------------------------------------------
--
Larry Rosenman http://www.lerctr.org/~ler
Phone: +1 972-414-9812 E-Mail: ler at lerctr.org
US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749
---------- End Forwarded Message ----------
--
Larry Rosenman http://www.lerctr.org/~ler
Phone: +1 972-414-9812 E-Mail: ler at lerctr.org
US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749
More information about the freebsd-current
mailing list