ATHCTRL for ATH

Fredrik Lindberg fli+freebsd-current at shapeshifter.se
Sun Aug 21 15:16:15 GMT 2005


Daniel Dvořák wrote:
> No, ifconfig doesn´t support.
> 
> You have to do all manually:
> 
> roztyly# sysctl dev.ath.0.slottime=9
> roztyly# sysctl dev.ath.0.ctstimeout=180
> roztyly# sysctl dev.ath.0.acktimeout=180
> 
> Unlike Linux:
> 
> lsd:/# uname -a
> Linux lsd 2.6.11x2 #1 Tue Jul 12 00:37:52 CEST 2005 i686 GNU/Linux
> lsd:/# athctrl -i aht0 -d 1000
> Setting distance on interface aht0 to 1000 meters
> lsd:/# athctrl -i aht1 -d 2500
> Setting distance on interface aht1 to 2500 meters
> 
> lsd:/# cat /proc/sys/dev/ath0/acktimeout
> 29
> lsd:/# cat /proc/sys/dev/ath0/ctstimeout
> 29
> lsd:/# cat /proc/sys/dev/ath0/slottime
> 13
> 
> lsd:/# cat /proc/sys/dev/ath1/slottime
> 18
> lsd:/# cat /proc/sys/dev/ath1/acktimeout
> 39
> lsd:/# cat /proc/sys/dev/ath1/ctstimeout
> 39
> 
> Dan

Ok, I hacked up a small patch. It's a bit crude since the only
interface I could find to these settings were through sysctl(3).
Put ifath.c in src/sbin/ifconfig and patch src/sbin/ifconfig/Makefile
with the attached patch and re-compile ifconfig.

 > ifconfig ath0 distance 1000
 > sysctl dev.ath.0.slottime dev.ath.0.acktimeout dev.ath.0.ctstimeout
dev.ath.0.slottime: 13
dev.ath.0.acktimeout: 29
dev.ath.0.ctstimeout: 29

 > ifconfig ath0 distance 2500
 > sysctl dev.ath.0.slottime dev.ath.0.acktimeout dev.ath.0.ctstimeout
dev.ath.0.slottime: 18
dev.ath.0.acktimeout: 39
dev.ath.0.ctstimeout: 39

	Fredrik Lindberg

> -----Original Message-----
> From: owner-freebsd-current at freebsd.org
> [mailto:owner-freebsd-current at freebsd.org] On Behalf Of Fredrik Lindberg
> Sent: Sunday, August 21, 2005 2:13 PM
> To: dandee at volny.cz
> Cc: freebsd-current at freebsd.org
> Subject: Re: ATHCTRL for ATH
> 
> Daniel Dvořák wrote:
> 
>>I am sorry but I don´t understand about modular ifconfig and about "to
> 
> phase
> 
>>out those sorts of programs out". But I am agree about that would be a
>>question for Sam.
>>
>>So we have to wait now.
>>
> 
> 
> It's quite simple, there is (and have been) numerous programs to
> configure different types of network interfaces (wicontrol, gifconfig,
> raycontrol, etc...).
> The goal is to phase out all these small programs and allow ifconfig to
> do their job instead.
> A modular ifconfig allows this without turning the ifconfig code into a
> bloated, un-maintainable pile of junk.
> 
> In essence, if those "ack+cts" settings you ask for were to be
> comitted into the source tree, I guess they would be added to
> ifconfig(8) and not as a separate tool.
> (Maybe ifconfig already supports this...)
> 
> 	Fredrik Lindberg
> 
> 
>>-----Original Message-----
>>From: owner-freebsd-current at freebsd.org
>>[mailto:owner-freebsd-current at freebsd.org] On Behalf Of Brooks Davis
>>Sent: Sunday, August 21, 2005 3:51 AM
>>To: dandee at volny.cz
>>Cc: freebsd-current at freebsd.org
>>Subject: Re: ATHCTRL for ATH
>>
>>On Sun, Aug 21, 2005 at 03:32:15AM +0200, Daniel Dvorak wrote:
>>
>>
>>>Hi all,
>>>
>>>I have one question for you. My friend use Linux Debian and he use atheros
>>>cards with madwifi drivers. Sam work together with others developers and I
>>>found out that he committed interesting tool for linux users.
>>>
>>>This tool is athctrl, which you know "athctrl program that sets the
>>
>>ack+cts
>>
>>
>>>timeouts based on the distance between two stations". And I think that
>>
>>this
>>
>>
>>>feature is useful not only for linux users but of course for users of
>>
>>others
>>
>>
>>>os like FreeBSD etc. 
>>>
>>>So, I do not know why the tool is not in main tree fbsd, maybe there is
>>>reason for this and I do not know. Which it is my mistake, so if it is
>>
>>true,
>>
>>
>>>I am sorry. Of course, I could not imagine how much work somebody has to
>>
>>do
>>
>>
>>>for this, but I would like to only ask if possible now before final
>>
>>release
>>
>>
>>>6.0 or in the future.
>>>
>>>Does somebody think somebody could commit this tool for FreeBSD users ?
>>
>>
>>It's unlikely athctrl will be commited because we're attempting to phase
>>those sorts of programs out in favor of a modular ifconfig.  It's not
>>clear to me if we the support or not at this point.  That would be a
>>question for Sam, but he's on vacation at the moment.
>>
>>-- Brooks
>>
> 
> 
> _______________________________________________
> freebsd-current at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe at freebsd.org"
> 

-------------- next part --------------
/*-
 * Copyright (c) 2005 Fredrik Lindberg
 * Copyright (c) 2002-2004 Gunter Burchardt, Local-Web AG
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#include <sys/param.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/sysctl.h>
#include <sys/time.h>

#include <net/if.h>

#include <ctype.h>
#include <err.h>
#include <errno.h>
#include <fcntl.h>
#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#include "ifconfig.h"

DECL_CMD_FUNC(setath_distance, val, d);

DECL_CMD_FUNC(setath_distance, val, d) {
	int slottime, acktout, ctstout, len;
	size_t newlen;
	char *base = NULL, *buf; 

#define SLOTTIME(distance) (9 + (distance / 300) + ((distance % 300) ? 1: 0)) 
	slottime = SLOTTIME(atoi(val));
	acktout = (slottime * 2) + 3;
	ctstout = (slottime * 2) + 3;
#undef SLOTTIME

	/*
	 * The only interface to these functions are through sysctl(3).
	 */
	if ((len = asprintf(&base, "dev.%s.", name)) == -1) 
		errx(1, "%s", strerror(errno));

	buf = (base + len - 1);
	while (!isnumber(*buf)) {
		char c = *buf;
		*buf = *(buf - 1);
		*(buf - 1) = c;
	}

	buf = NULL;
	if ((newlen = asprintf(&buf, "%s.slottime", base)) == -1) 
		errx(1, "%s", strerror(errno));
	if (sysctlbyname(buf, NULL, NULL, (void *)&slottime, sizeof(slottime)) != 0) 
		errx(1, "unable to set slottime");

	if ((newlen = asprintf(&buf, "%s.acktimeout", base)) == -1) 
		errx(1, "%s", strerror(errno));
	if (sysctlbyname(buf, NULL, NULL, (void *)&acktout, sizeof(acktout)) != 0) 
		errx(1, "unable to set acktimeout");

	if ((newlen = asprintf(&buf, "%s.ctstimeout", base)) == -1) 
		errx(1, "%s", strerror(errno));
	if (sysctlbyname(buf, NULL, NULL, (void *)&ctstout, sizeof(ctstout)) != 0) 
		errx(1, "unable to set ctstimeout");

	free(buf);
	free(base);
}

static struct cmd ath_cmds[] = {
	DEF_CMD_ARG("distance", setath_distance),
};

static struct afswtch af_ath = {
	.af_name	= "af_ath",
	.af_af		= AF_UNSPEC,
	.af_status	= NULL,
};

static __constructor void
ieee80211_ctor(void)
{
#define N(a)    (sizeof(a) / sizeof(a[0]))
	int i;

	for (i = 0; i < N(ath_cmds);  i++)
		cmd_register(&ath_cmds[i]);
	af_register(&af_ath);
#undef N
}

-------------- next part --------------
Index: Makefile
===================================================================
RCS file: /home/ncvs/src/sbin/ifconfig/Makefile,v
retrieving revision 1.29
diff -u -r1.29 Makefile
--- Makefile	5 Jun 2005 03:32:51 -0000	1.29
+++ Makefile	21 Aug 2005 15:11:58 -0000
@@ -28,6 +28,8 @@
 
 SRCS+=	ifbridge.c		# bridge support
 
+SRCS+=	ifath.c			# Special ath(4) commands 
+
 .if !defined(RELEASE_CRUNCH)
 SRCS+=	af_ipx.c		# IPX support
 DPADD=	${LIBIPX}


More information about the freebsd-current mailing list