ラベル WLAN の投稿を表示しています。 すべての投稿を表示
ラベル WLAN の投稿を表示しています。 すべての投稿を表示

2009年6月15日月曜日

rt73usb rt2500usb で hostapd

相変わらずの TXDONE_UNKNOWN
2.6.30 がリリースされたけど /drivers/net/wireless/rt2x00/rt2x00usb の TXDONE_UNKNOWN については以前のまま。チェックしている辺を grep すると何となく....
$ fgrep -C 4 'test_bit(TXDONE' *.c
rt2x00dev.c- /*
rt2x00dev.c- * Update TX statistics.
rt2x00dev.c- */
rt2x00dev.c- rt2x00dev->link.qual.tx_success +=
rt2x00dev.c: test_bit(TXDONE_SUCCESS, &txdesc->flags);
rt2x00dev.c- rt2x00dev->link.qual.tx_failed +=
rt2x00dev.c: test_bit(TXDONE_FAILURE, &txdesc->flags);
rt2x00dev.c-
rt2x00dev.c- rate_idx = skbdesc->tx_rate_idx;
rt2x00dev.c- rate_flags = skbdesc->tx_rate_flags;
rt2x00dev.c-
--
rt2x00dev.c- tx_info->status.rates[0].count = txdesc->retry + 1;
rt2x00dev.c- tx_info->status.rates[1].idx = -1; /* terminate */
rt2x00dev.c-
rt2x00dev.c- if (!(tx_info->flags & IEEE80211_TX_CTL_NO_ACK)) {
rt2x00dev.c: if (test_bit(TXDONE_SUCCESS, &txdesc->flags))
rt2x00dev.c- tx_info->flags |= IEEE80211_TX_STAT_ACK;
rt2x00dev.c: else if (test_bit(TXDONE_FAILURE, &txdesc->flags))
rt2x00dev.c- rt2x00dev->low_level_stats.dot11ACKFailureCount++;
rt2x00dev.c- }
rt2x00dev.c-
rt2x00dev.c- if (rate_flags & IEEE80211_TX_RC_USE_RTS_CTS) {
rt2x00dev.c: if (test_bit(TXDONE_SUCCESS, &txdesc->flags))
rt2x00dev.c- rt2x00dev->low_level_stats.dot11RTSSuccessCount++;
rt2x00dev.c: else if (test_bit(TXDONE_FAILURE, &txdesc->flags))
rt2x00dev.c- rt2x00dev->low_level_stats.dot11RTSFailureCount++;
rt2x00dev.c- }
rt2x00dev.c-
rt2x00dev.c- /*
上の方はリンク品質、結果送信レートに。下の方が肝心の hostapd で送信可否の判断材料IEEE80211_RADIOTAP_F_TX_FAILになるらしい
$ cd net/mac80211/
$ fgrep -C 2 IEEE80211_RADIOTAP_F_TX_FAIL *.c
main.c- if (!(info->flags & IEEE80211_TX_STAT_ACK) &&
main.c- !is_multicast_ether_addr(hdr->addr1))
main.c: rthdr->tx_flags |= cpu_to_le16(IEEE80211_RADIOTAP_F_TX_FAIL);
main.c-
main.c- /*
で、仕方が無いと言うか無理矢理稼働させるがための二行パッチ
$ cd drivers/net/wireless/rt2x00/
$ diff -ubB rt2x00usb.c.orig rt2x00usb.c
--- rt2x00usb.c.orig 2009-06-15 20:14:27.000000000 +0900
+++ rt2x00usb.c 2009-06-15 20:14:53.000000000 +0900
@@ -200,7 +200,7 @@
*/
txdesc.flags = 0;
if (!urb->status)
- __set_bit(TXDONE_UNKNOWN, &txdesc.flags);
+ __set_bit(TXDONE_SUCCESS, &txdesc.flags);
else
__set_bit(TXDONE_FAILURE, &txdesc.flags);
txdesc.retry = 0;

コンパイル
hostapd を git やら CVS やらで持って来てl.... 後出しじゃんけんだけど
$ ldd /usr/local/sbin/hostapd
linux-vdso.so.1 => (0x00007fff06b95000)
libnl.so.1 => /usr/lib/libnl.so.1 (0x00007f8916e67000)
libssl.so.0.9.8 => /usr/lib/libssl.so.0.9.8 (0x00007f8916c16000)
libcrypto.so.0.9.8 => /usr/lib/libcrypto.so.0.9.8 (0x00007f891687b000)
libc.so.6 => /lib/libc.so.6 (0x00007f8916528000)
libm.so.6 => /lib/libm.so.6 (0x00007f89162a5000)
libdl.so.2 => /lib/libdl.so.2 (0x00007f89160a1000)
libz.so.1 => /usr/lib/libz.so.1 (0x00007f8915e8a000)
/lib64/ld-linux-x86-64.so.2 (0x00007f89170b6000)
openssl と libz ほか libnl が必要。debian/lenny では libnl1 libnl-dev でバージョンが 1。どうも新しい方が良さそうなので git で持って来た方が吉。以前の $HOSTAPD/defconfig には CONFIG_LIBNL20 なんてあったけど、今は無し。まとめて
  • git などで hostapdlibnl 持ってくる
  • lib〜-dev は libc6-dev zlib1g-dev libssl-dev
  • libnl を ./configure --prefix=/usr/local でコンパイル & ld.so.conf 周りに /usr/local/lib が含まれていること確認して ldconfig
  • hostap/hostapd に移って defconfig を .config に変更。適当に変更するも CONFIG_DRIVER_NL80211=y は忘れずに

その他
やべ、面倒になってきた....国によって異なる利用可能な無線スペクトラム? に従うために、この辺りも、多分最近のものは必須。これらコンパイルに必要な追加パッケージは crda の README に書かれている通り python-m2crypto。
同じく crda の方で make install すると udev の rule が /usr/lib/udev/rules.d/85-regulatory.rules にコピーされてしまうので /etc/udev/rules.d/ に移してあげるコト。

おまけ
  • It's All Text なるもの試してみました。ラクチンだけど考えまとめてないと、こんな風にとりとめなくウダウダは相変わらず。
  • Wikipedia の 802.11 カテゴリがまとまっている。
  • Adobe labs からの 64bit 版 Adobe Flash Player 10 でも Googlel/検察ツール/ワンダーホイールで落ちる....

# チラシの裏

2009年5月6日水曜日

ralink USB で hostapd

どこで何を調べていたか定かではないけど hostapd での nl80211 ドライバはつい最近、2.6.30 からだよ。といった ML のアーカイブを見かけた... はさて置き。

ralink 謹製のドライバが、この辺り にあるので ``RT2501USB(RT73:RT2571W/RT2573/RT2671)'' を持ってきて眺めてみた。が、送信については ACK のチェックは無いようで、USB - urb? のステータスがエラーで無ければ送信 OK というスタンス。一方 linux では SUCCESS は送信フレームの ACK が返ってきたときだけ。と厳しいためrt2x00usb.c にてエラーだったら FAILURE。それ以外はエラーじゃないけど ACK が確認できないので UNKNOWN。この UNKNOWN が enum mac80211_tx_control_flags::include/net/mac80211.h の IEEE80211_TX_STAT_ACK か否か。で否との結果送信できなかったぁ。で動かない。

ralink で OK。に従うならば TXDONE_UNKNOWN を TXDONE_SUCCESS にするのもアリかと。

tcpdump で wlan - 復習

にっ、二年前ですか。こんなことちょっと調べた後も進歩なし。もう一度 MAC フレームの先頭、フレームコントロールフィールドについて。tcpdump でフィルタする時には wlan[0] あるいは wlan[1] で指定。
wlan[0]
  • sub type: 4bit
  • type: 2bit
  • version: 2bit

  • wlan[1]: すべて 1bit
  • ToDS
  • FromDS
  • MoreFragment
  • Retry
  • PowerManagement
  • MoreData
  • WEP
  • Order
  • 先日の tcpdump-workers へのリンクが切れていたので、こちら参照しつつ、バージョンは 0。管理フレームの type は 0。subtype は
    • 0000 association request
    • 0001 association response
    • 0010 reassociation request
    • 0011 reassociation response
    • 0100 probe request
    • 0101 probe response
    • 1000 beacon
    • 1010 deassociation
    • 1011 authentication
    • 1100 deauthentication
    を踏まえるとビーコンフレームは
    # iw dev wlan0 interface add mon0 type monitor flags none
    # ip link set mon0 up
    # ip link ls
    5: mon0: mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ieee802.11/radiotap xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    # tcpdump -ntvvi mon0 '(wlan[0] & 0xff) == 0x80'
    tcpdump: WARNING: mon0: no IPv4 address assigned
    tcpdump: listening on mon0, link-type IEEE802_11_RADIO (802.11 plus BSD radio information header), capture size 96 bytes
    157275684377us tsft 1.0 Mb/s 2472 MHz (0x00a0) -33dB signal antenna 1 [0x0000000e] 0us Beacon (foobar) [1.0* 2.0* 5.5* 11.0* 6.0 9.0 12.0 18.0 Mbit] ESS, PRIVACY
    157275945495us tsft 1.0 Mb/s 2472 MHz (0x00a0) -34dB signal antenna 1 [0x0000000e] 0us Beacon (foobar) [1.0* 2.0* 5.5* 11.0* 6.0 9.0 12.0 18.0 Mbit] ESS, PRIVACY
    ....
    radiotap でも wlan[] 指定は OK。も一つ良くリンク忘れるので備忘録
    IEEE 802.11-2007 IEEE Standard for Information technology-Telecommunications and information exchange between systems-Local and metropolitan area networks-Specific requirements - Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications

    2009年4月20日月曜日

    USB デバイスで hostapd

    # 半年以上放置....

    2.6.29 から AP モードサポートっ! で試してみた。こちら参照すると ralink の USB デバイスが OK とのことで
    $ lsusb
    Bus 001 Device 002: ID 0411:00d8 MelCo., Inc. WLI-U2-SG54HP

    で挑戦するも今一つと言うか、中途ハンパな状態だけど、チラシのウラ。強い電波で ARP ごにょごにょだったら Linux。なんて言わせないぜっ。か定かではないけど、こちら
    • git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/crda.git
    • git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-regdb.git
    持って来る。debian であれば 85-regulatory.rules は /etc/udev/rules.d の下。libnl や python-crypto もパッケージそのままで OK。hostapd も
    • git://w1.fi/srv/git/hostap.git
    で、長くなるけど設定はこんな感じ
    interface=wlan0
    driver=nl80211
    logger_syslog=-1
    logger_syslog_level=4
    logger_stdout=-1
    logger_stdout_level=0
    dump_file=/tmp/hostapd.dump
    ctrl_interface=/var/run/hostapd
    ctrl_interface_group=0
    ssid=foobar
    country_code=JP
    ieee80211d=1
    hw_mode=g
    channel=2
    beacon_int=256
    dtim_period=2
    max_num_sta=255
    macaddr_acl=0
    accept_mac_file=/etc/hostapd/mac.accept
    deny_mac_file=/etc/hostapd/mac.deny
    auth_algs=1
    ieee8021x=1
    eapol_version=2
    own_ip_addr=192.168.1.1
    wpa=3
    wpa_passphrase=tetest1234
    wpa_key_mgmt=WPA-PSK
    wpa_pairwise=CCMP TKIP
    wpa_group_rekey=600
    wpa_strict_rekey=1
    wpa_gmk_rekey=86400
    wpa_ptk_rekey=600
    # とてつもなく適当
    で動かん...こちら が未解決の模様。

    rt2x00usb_interrupt_txdone()::drivers/net/wireless/rt2x00/rt2x00usb.c のコメントそのままに、失敗した訳では無いが、成功 (ACK を受信した) 訳でも無いと。曰く hostapd の不備との話を踏まえて、hostapd 側で IEEE80211_RADIOTAP_F_TX_FAIL のチェックを無効にしたら、動くコトは動いたが、むーん。レートが 1M から上がらん。

    で、結局は先の未解決のすったもんだ、そのままに TXDONE_UNKNOWN を TXDONE_SUCCESS にして自宅内運用中。iPhone でひっかかるような感じになることあるけど、まぁ。ralink の USB デバイスは全て (と言っても別系は 2.6.29 では rt2500usb のみ) ブチ当ってしまう模様。

    2.6.30 以降の ar9170 か rt3070 に期待するしか無いのかなぁ....

    2008年8月25日月曜日

    hostapd の snapshot

    こちらを参照しつつ...git かぁ。libnl1.1 以上が必要っぽく debian であれば lenny で apt-get install libnl-dev。更に /usr/include/linux は linux.dpkg-dist か何かに変更して 2.6.27-rc の /usr/src/linux/include/linux を /usr/include に symlink。

    defconfig を .config にコピーして CONFIG_DRIVER_NL80211 を有効にして make。WPA だけの最小? config は
    interface=wlan0
    driver=nl80211
    hw_mode=g
    channel=6
    ssid=tetest
    wpa=1
    wpa_passphrase=hogehogemogemoge_foobarbar
    で良い? ./hostapd -dd tetest.conf とした後、別から probe 投げると tetest と返すところまで。

    mac80211 の Master mode

    2.6.27-rc にて mac80211_hwsim なる WLAN デバイスのシミュレータが入ったとのお話。Documentation/networking/mac80211_hwsim/README を眺めると
    Please note that the current Linux kernel does not enable AP mode, so a
    simple patch is needed to enable AP mode selection:
    http://johannes.sipsolutions.net/patches/kernel/all/LATEST/006-allow-ap-vlan-modes.patch
    ここにある###-allow-ap-vlan-modes.patch がソレなのだが、コメントが...
    Don't allow doing it with wext because then
    people will just attempt to do it manually (without hostapd) and
    complain that it doesn't work.
    あー...オレオレ。該当。文句言う言う。なんて話はさておき。

    とは言え mac80211 なデバイス全てで hostapd が動くわけではなさげ。と言うか IEEE80211_IF_TYPE_AP が有効なわけではなさげ。手元にあるデバイス...zd1211rw, ath5k, rtl8187, rt2x00 内 2.6.27-rc にて動作するのは rt2x00 のみ。また ath5k は近々 という感じ。で rt2x00 の何を使っているかと言えば
    $ lsusb
    ...
    Bus 003 Device 003: ID 0411:0067 MelCo., Inc. WLI-U2-KG54-AI WLAN
    ...
    バッファローの製品。他は?
    fgrep "USB_DEVICE(" /usr/src/testing/drivers/net/wireless/rt2x00/*.c
    なんてたたくと山ほど。USB_DEVICE の中、例えば rt73usb.c に、こんな行
            /* Buffalo */
    { USB_DEVICE(0x0411, 0x00f4), USB_DEVICE_DATA(&rt73usb_ops) },
    があったら、Google 様に "0411:00f4"と尋ねると、ヒントが見付かることもアリ。

    ところで WPA や RSN ではない Master mode とするために、こんな抜粋してみたけど...最初のドキュメント通り、Master mode になるも ip link set 〜 up あるいは ifconfig 〜 up なんてしてもリンクアップしているように見えますが、動きませんっ。ええ、理解してませんっ。
    #include <stdio.h>
    #include <linux/nl80211.h>

    #include <netlink/genl/genl.h>
    #include <netlink/genl/ctrl.h>
    #include <netlink/genl/mngt.h>
    #include <netlink/route/link.h>

    int name2ifindex(char *ifname)
    {
    struct nl_handle *nlh;
    struct nl_cache *link_cache;
    int ifindex = -1;

    if (!ifname)
    return -1;

    nlh = nl_handle_alloc();
    if (!nlh)
    return -1;

    if (nl_connect(nlh, NETLINK_ROUTE) < 0)
    goto errout;

    link_cache = rtnl_link_alloc_cache(nlh);
    if (!link_cache)
    goto errout;

    ifindex = rtnl_link_name2i(link_cache, ifname);

    nl_cache_free(link_cache);
    errout:
    nl_close(nlh);
    nl_handle_destroy(nlh);

    return ifindex;
    }

    int main(int argc, char *argv[])
    {
    struct nl_handle *h;
    struct nl_msg *msg;
    struct nl_cache *cache;
    struct genl_family *family;
    int ifindex = name2ifindex(argv[1]);

    if (ifindex < 0) {
    fprintf(stderr, "could not get ifindex: %s\n", argv[1]);
    return -1;
    }

    h = nl_handle_alloc();
    if (!h) {
    nl_perror("nl_handle_alloc");
    return -1;
    }

    if (genl_connect(h) < 0) {
    nl_perror("genl_connect");
    goto nla_handle_failure_2;
    }

    cache = genl_ctrl_alloc_cache(h);
    if (!cache) {
    nl_perror("genl_ctrl_alloc_cache");
    goto nla_handle_failure_1;
    }

    family = genl_ctrl_search_by_name(cache, "nl80211");
    if (!family) {
    nl_perror("search nl80211 family");
    goto nla_cache_failure;
    }

    msg = nlmsg_alloc();
    if (!msg) {
    nl_perror("nlmsg_alloc");
    goto nla_cache_failure;
    }

    genlmsg_put(msg, 0, 0, genl_family_get_id(family), 0,
    0, NL80211_CMD_SET_INTERFACE, 0);
    NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, ifindex);
    NLA_PUT_U32(msg, NL80211_ATTR_IFTYPE, NL80211_IFTYPE_AP);


    if (nl_send_auto_complete(h, msg) < 0 || nl_wait_for_ack(h) < 0)
    nl_perror("Failed to set interface to master mode");

    nla_put_failure:
    nlmsg_free(msg);
    nla_cache_failure:
    nl_cache_free(cache);
    nla_handle_failure_1:
    nl_close(h);
    nla_handle_failure_2:
    nl_handle_destroy(h);

    return 0;
    }

    FreeRadius 〜 EAP/TLS, EAP/TTLS, EAP/PEAP 〜 Linux Debian #2

    いっ...一ヶ月以上放置。

    > いや、ここに張る意味あんまり無いけど

    で、こちら。
    etch 用は TTLS 作っていなかったけど修正。ロクに試さないでいて、ごめんなさい。
    例のごとくですが、おかしなトコありましたら一報もらえると嬉しいです。

    2008年7月8日火曜日

    FreeRadius 〜 EAP/TLS, EAP/TTLS, EAP/PEAP 〜 Linux Debian Lenny

    いや、ここに張る意味あんまり無いけどチラシの裏、ちょっと jot。rules に

    if dh_shlibdeps -p $$pkg -- -O 2>/dev/null | grep -q libssl; then
    echo "$$pkg links to openssl"
    exit 1
    fi
    ここまでやってあると、イカンことのように思えてくるけど....
    diff -ubBrN freeradius-2.0.4+dfsg.orig/debian/control freeradius-2.0.4+dfsg/debian/control
    --- freeradius-2.0.4+dfsg.orig/debian/control 2008-05-19 11:47:18.000000000 +0900
    +++ freeradius-2.0.4+dfsg/debian/control 2008-07-08 22:13:50.000000000 +0900
    @@ -1,5 +1,5 @@
    Source: freeradius
    -Build-Depends: autotools-dev, debhelper (>= 6.0.7), libgdbm-dev, libiodbc2-dev, libkrb5-dev, libldap2-dev, libltdl3-dev, libmysqlclient15-dev | libmysqlclient-dev, libpam0g-dev, lib
    pcap-dev, libperl-dev, libpq-dev, libsasl2-dev, libsnmp-dev, libtool, python-dev
    +Build-Depends: autotools-dev, debhelper (>= 6.0.7), libgdbm-dev, libiodbc2-dev, libkrb5-dev, libldap2-dev, libltdl3-dev, libmysqlclient15-dev | libmysqlclient-dev, libpam0g-dev, lib
    pcap-dev, libperl-dev, libpq-dev, libsasl2-dev, libsnmp-dev, libtool, python-dev libssl-dev
    Section: net
    Priority: optional
    Maintainer: Stephen Gran
    @@ -11,7 +11,7 @@
    Depends: lsb-base (>= 3.0-6), ${shlibs:Depends}, freeradius-common, libfreeradius2 (= ${binary:Version})
    Provides: radius-server
    Recommends: freeradius-utils
    -Suggests: freeradius-ldap, freeradius-mysql, freeradius-krb5, freeradius-postgresql
    +Suggests: freeradius-ldap, freeradius-mysql, freeradius-krb5, freeradius-postgresql, freeradius-tls, freeradius-peap
    Description: a high-performance and highly configurable RADIUS server
    A high-performance RADIUS server with support for...
    - many vendor-specific attributes
    @@ -121,3 +121,26 @@
    This package contains the detached debugging symbols for the Debian freeradius
    packages

    +Package: freeradius-tls
    +Architecture: any
    +Depends: freeradius (= ${binary:Version}), ${shlibs:Depends}
    +Description: eap-tls module for FreeRADIUS server
    + Debian will not provide a binary version of the rlm_eap_tls.so library. This
    + module is required if you want to use EAP/TLS authentication, commonly used
    + for WiFi access points
    +
    +Package: freeradius-ttls
    +Architecture: any
    +Depends: freeradius (= ${binary:Version}), ${shlibs:Depends}
    +Description: eap-ttls module for FreeRADIUS server
    + Debian will not provide a binary version of the rlm_eap_ttls.so library. This
    + module is required if you want to use EAP/TLS authentication, commonly used
    + for WiFi access points
    +
    +Package: freeradius-peap
    +Architecture: any
    +Depends: freeradius (= ${binary:Version}), ${shlibs:Depends}
    +Description: eap-peap module for FreeRADIUS server
    + Debian will not provide a binary version of the rlm_eap_peap.so library. This
    + module is required if you want to use EAP/PEAP authentication, commonly used
    + for WiFi access points
    diff -ubBrN freeradius-2.0.4+dfsg.orig/debian/freeradius-peap.install freeradius-2.0.4+dfsg/debian/freeradius-peap.install
    --- freeradius-2.0.4+dfsg.orig/debian/freeradius-peap.install 1970-01-01 09:00:00.000000000 +0900
    +++ freeradius-2.0.4+dfsg/debian/freeradius-peap.install 2008-07-08 22:13:50.000000000 +0900
    @@ -0,0 +1 @@
    +usr/lib/freeradius/rlm_eap_peap*.so
    diff -ubBrN freeradius-2.0.4+dfsg.orig/debian/freeradius-peap.postinst freeradius-2.0.4+dfsg/debian/freeradius-peap.postinst
    --- freeradius-2.0.4+dfsg.orig/debian/freeradius-peap.postinst 1970-01-01 09:00:00.000000000 +0900
    +++ freeradius-2.0.4+dfsg/debian/freeradius-peap.postinst 2008-07-08 22:13:50.000000000 +0900
    @@ -0,0 +1,21 @@
    +#! /bin/sh
    +
    +set -e
    +
    +case "$1" in
    + configure)
    + if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then
    + invoke-rc.d freeradius restart
    + else
    + /etc/init.d/freeradius restart
    + fi
    + ;;
    + abort-upgrade)
    + ;;
    + abort-remove)
    + ;;
    + abort-deconfigure)
    + ;;
    +esac
    +
    +#DEBHELPER#
    diff -ubBrN freeradius-2.0.4+dfsg.orig/debian/freeradius-tls.install freeradius-2.0.4+dfsg/debian/freeradius-tls.install
    --- freeradius-2.0.4+dfsg.orig/debian/freeradius-tls.install 1970-01-01 09:00:00.000000000 +0900
    +++ freeradius-2.0.4+dfsg/debian/freeradius-tls.install 2008-07-08 22:13:50.000000000 +0900
    @@ -0,0 +1 @@
    +usr/lib/freeradius/rlm_eap_tls*.so
    diff -ubBrN freeradius-2.0.4+dfsg.orig/debian/freeradius-tls.postinst freeradius-2.0.4+dfsg/debian/freeradius-tls.postinst
    --- freeradius-2.0.4+dfsg.orig/debian/freeradius-tls.postinst 1970-01-01 09:00:00.000000000 +0900
    +++ freeradius-2.0.4+dfsg/debian/freeradius-tls.postinst 2008-07-08 22:13:50.000000000 +0900
    @@ -0,0 +1,21 @@
    +#! /bin/sh
    +
    +set -e
    +
    +case "$1" in
    + configure)
    + if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then
    + invoke-rc.d freeradius restart
    + else
    + /etc/init.d/freeradius restart
    + fi
    + ;;
    + abort-upgrade)
    + ;;
    + abort-remove)
    + ;;
    + abort-deconfigure)
    + ;;
    +esac
    +
    +#DEBHELPER#
    diff -ubBrN freeradius-2.0.4+dfsg.orig/debian/freeradius-ttls.install freeradius-2.0.4+dfsg/debian/freeradius-ttls.install
    --- freeradius-2.0.4+dfsg.orig/debian/freeradius-ttls.install 1970-01-01 09:00:00.000000000 +0900
    +++ freeradius-2.0.4+dfsg/debian/freeradius-ttls.install 2008-07-08 22:13:50.000000000 +0900
    @@ -0,0 +1 @@
    +usr/lib/freeradius/rlm_eap_ttls*.so
    diff -ubBrN freeradius-2.0.4+dfsg.orig/debian/freeradius-ttls.postinst freeradius-2.0.4+dfsg/debian/freeradius-ttls.postinst
    --- freeradius-2.0.4+dfsg.orig/debian/freeradius-ttls.postinst 1970-01-01 09:00:00.000000000 +0900
    +++ freeradius-2.0.4+dfsg/debian/freeradius-ttls.postinst 2008-07-08 22:13:50.000000000 +0900
    @@ -0,0 +1,21 @@
    +#! /bin/sh
    +
    +set -e
    +
    +case "$1" in
    + configure)
    + if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then
    + invoke-rc.d freeradius restart
    + else
    + /etc/init.d/freeradius restart
    + fi
    + ;;
    + abort-upgrade)
    + ;;
    + abort-remove)
    + ;;
    + abort-deconfigure)
    + ;;
    +esac
    +
    +#DEBHELPER#
    diff -ubBrN freeradius-2.0.4+dfsg.orig/debian/rules freeradius-2.0.4+dfsg/debian/rules
    --- freeradius-2.0.4+dfsg.orig/debian/rules 2008-05-19 11:47:18.000000000 +0900
    +++ freeradius-2.0.4+dfsg/debian/rules 2008-07-08 22:13:50.000000000 +0900
    @@ -26,7 +26,7 @@
    pkgdocdir = /usr/share/doc/$(package)
    raddbdir = /etc/$(package)

    -modulelist=krb5 ldap sql_mysql sql_iodbc sql_postgresql
    +modulelist=krb5 ldap sql_mysql sql_iodbc sql_postgresql eap_peap eap_tls eap_ttls
    pkgs=$(shell dh_listpackages)

    # This has to be exported to make some magic below work.
    @@ -80,14 +80,10 @@
    --with-large-files --with-udpfromto --with-edir \
    --enable-developer \
    --config-cache \
    - --without-rlm_eap_tls \
    - --without-rlm_eap_ttls \
    - --without-rlm_eap_peap \
    --without-rlm_eap_tnc \
    --without-rlm_otp \
    --with-rlm_sql_postgresql_lib_dir=`pg_config --libdir` \
    --with-rlm_sql_postgresql_include_dir=`pg_config --includedir` \
    - --without-openssl \
    --without-rlm_eap_ikev2 \
    --without-rlm_sql_oracle \
    --without-rlm_sql_unixodbc \
    @@ -164,6 +160,7 @@

    for mod in ${modulelist}; do \
    pkg=$${mod##sql_} ; \
    + pkg=$${mod##eap_} ; \
    dh_install --sourcedir=$(freeradius_dir) -p freeradius-$$pkg ; \
    rm -f $(freeradius_dir)/usr/lib/freeradius/rlm_$$mod*.so ; \
    done
    @@ -174,12 +171,6 @@
    dh_strip -a --dbg-package=freeradius-dbg

    dh_makeshlibs -a -n
    - for pkg in ${pkgs} ; do \
    - if dh_shlibdeps -p $$pkg -- -O 2>/dev/null | grep -q libssl; then \
    - echo "$$pkg links to openssl" ;\
    - exit 1 ;\
    - fi ;\
    - done
    dh_shlibdeps

    binary-common:
    apt-get source freeradius して上記パッチあてて fakeroot debian/rules binary すると、上位のディレクトリに freeradius-peap freeradius-tls freeradius-ttls というパッケージが出来上がると思います。

    2008年3月4日火曜日

    FreeRadius 〜 EAP/TLS, EAP/TTLS, EAP/PEAP 〜 Linux Debian Etch

    フランス語? 全くわからないのですが、面白いものでとりあえず build だけはできました。debian etch の freeraduis ですが ssl は別となっているので、ちょっと試そうか。の都度似たような探しものばかりしていた。が、こちらのサイト が良いさげでした。ありがとうございます。毎度のことながらの勉強不足で、コマンドそのまま。ですが...でパッチを jot。
    diff -ubBrN freeradius-1.1.3/debian/control freeradius-1.1.3-ssl/debian/control
    --- freeradius-1.1.3/debian/control 2008-03-04 21:36:44.000000000 +0900
    +++ freeradius-1.1.3-ssl/debian/control 2008-03-04 21:31:58.000000000 +0900
    @@ -1,6 +1,6 @@
    Source: freeradius
    -Build-Depends: debhelper (>= 5), libltdl3-dev, libpam0g-dev, libmysqlclient15-dev | libmysqlclient-dev, libgdbm-dev, libldap2-dev, libsasl2-dev, libiodbc2-dev, libkrb5-dev, snmp, autotools-dev, dpatch (>= 2), libperl-dev, libtool, dpkg-dev (>= 1.13.19)
    -Build-Conflicts: libssl-dev
    +Build-Depends: debhelper (>= 5), libltdl3-dev, libpam0g-dev, libmysqlclient15-dev | libmysqlclient-dev, libgdbm-dev, libldap2-dev, libsasl2-dev, libiodbc2-dev, libkrb5-dev, snmp, autotools-dev, dpatch (>= 2), libperl-dev, libtool, dpkg-dev (>= 1.13.19), libssl-dev
    +Build-Conflicts:
    Section: net
    Priority: optional
    Maintainer: Stephen Gran
    @@ -66,3 +66,19 @@
    Description: set of PHP scripts for administering a FreeRADIUS server
    These scripts provide a web-based interface for administering a FreeRADIUS
    server which stores authentication information in either SQL or LDAP.
    +
    +Package: freeradius-eaptls
    +Architecture: any
    +Depends: freeradius (= ${binary:Version}), ${shlibs:Depends}
    +Description: eap-tls module for FreeRADIUS server
    + Debian will not provide a binary version of the rlm_eap_tls.so library. This
    + module is required if you want to use EAP/TLS authentication, commonly used
    + for WiFi access points
    +
    +Package: freeradius-eappeap
    +Architecture: any
    +Depends: freeradius (= ${binary:Version}), ${shlibs:Depends}
    +Description: eap-peap module for FreeRADIUS server
    + Debian will not provide a binary version of the rlm_eap_peap.so library. This
    + module is required if you want to use EAP/PEAP authentication, commonly used
    + for WiFi access points
    \ No newline at end of file
    diff -ubBrN freeradius-1.1.3/debian/freeradius-eappeap.install freeradius-1.1.3-ssl/debian/freeradius-eappeap.install
    --- freeradius-1.1.3/debian/freeradius-eappeap.install 1970-01-01 09:00:00.000000000 +0900
    +++ freeradius-1.1.3-ssl/debian/freeradius-eappeap.install 2008-03-04 21:56:40.000000000 +0900
    @@ -0,0 +1 @@
    +usr/lib/freeradius/rlm_eap_peap*.so
    diff -ubBrN freeradius-1.1.3/debian/freeradius-eappeap.postinst freeradius-1.1.3-ssl/debian/freeradius-eappeap.postinst
    --- freeradius-1.1.3/debian/freeradius-eappeap.postinst 1970-01-01 09:00:00.000000000 +0900
    +++ freeradius-1.1.3-ssl/debian/freeradius-eappeap.postinst 2008-03-04 21:56:15.000000000 +0900
    @@ -0,0 +1,21 @@
    +#! /bin/sh
    +
    +set -e
    +
    +case "$1" in
    + configure)
    + if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then
    + invoke-rc.d freeradius reload
    + else
    + /etc/init.d/freeradius reload
    + fi
    + ;;
    + abort-upgrade)
    + ;;
    + abort-remove)
    + ;;
    + abort-deconfigure)
    + ;;
    +esac
    +
    +#DEBHELPER#
    diff -ubBrN freeradius-1.1.3/debian/freeradius-eaptls.install freeradius-1.1.3-ssl/debian/freeradius-eaptls.install
    --- freeradius-1.1.3/debian/freeradius-eaptls.install 1970-01-01 09:00:00.000000000 +0900
    +++ freeradius-1.1.3-ssl/debian/freeradius-eaptls.install 2008-03-04 21:34:18.000000000 +0900
    @@ -0,0 +1 @@
    +usr/lib/freeradius/rlm_eap_tls*.so
    diff -ubBrN freeradius-1.1.3/debian/freeradius-eaptls.postinst freeradius-1.1.3-ssl/debian/freeradius-eaptls.postinst
    --- freeradius-1.1.3/debian/freeradius-eaptls.postinst 1970-01-01 09:00:00.000000000 +0900
    +++ freeradius-1.1.3-ssl/debian/freeradius-eaptls.postinst 2008-03-04 21:34:48.000000000 +0900
    @@ -0,0 +1,21 @@
    +#! /bin/sh
    +
    +set -e
    +
    +case "$1" in
    + configure)
    + if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then
    + invoke-rc.d freeradius restart
    + else
    + /etc/init.d/freeradius restart
    + fi
    + ;;
    + abort-upgrade)
    + ;;
    + abort-remove)
    + ;;
    + abort-deconfigure)
    + ;;
    +esac
    +
    +#DEBHELPER#
    diff -ubBrN freeradius-1.1.3/debian/rules freeradius-1.1.3-ssl/debian/rules
    --- freeradius-1.1.3/debian/rules 2008-03-04 21:36:44.000000000 +0900
    +++ freeradius-1.1.3-ssl/debian/rules 2008-03-04 21:33:21.000000000 +0900
    @@ -23,8 +23,10 @@
    # You will also need to add a Build-Depends on libssl-dev and libpq-dev
    # and remove the Build-Conflicts on libssl-dev
    # Finally you need to cat debian/control.postgresql >> debian/control
    -buildssl=--without-rlm_eap_peap --without-rlm_eap_tls --without-rlm_eap_ttls --without-rlm_otp --without-rlm_sql_postgresql --without-snmp-modulelist=krb5 ldap sql_mysql sql_iodbc
    +# buildssl=--without-rlm_eap_peap --without-rlm_eap_tls --without-rlm_eap_ttls --without-rlm_otp --without-rlm_sql_postgresql --without-snmp
    +# modulelist=krb5 ldap sql_mysql sql_iodbc
    +buildssl=--without-rlm_otp --without-rlm_sql_postgresql --without-snmp
    +modulelist=krb5 ldap sql_mysql sql_iodbc eap_peap eap_tls
    #buildssl=--with-rlm_sql_postgresql_lib_dir=`pg_config --libdir` --with-rlm_sql_postgresql_include_dir=`pg_config --includedir`
    #modulelist=krb5 ldap sql_mysql sql_iodbc sql_postgresql
    freeradius-eaptls_1.1.3-3_i386.deb freeradius-eappeap_1.1.3-3_i386.deb なるものが出来上がり。これらだけ。であれば、元サイトの下の方にアリ。

    2007年10月22日月曜日

    rtl8187 動作せず...

    やっぱりダメらしい。
    ~# cat /sys/bus/usb/devices/2-2/product
    NETGEAR WG111v3
    Web 探してみると v2 で asic_rev = 1。更に rf_init = rtl8225z2_rf_init っぽかったのでベタで試してみたところ、ウンとは言うがスンとは言わず。といった感じ。 zd1211rw も bcm43xx も mac802.11 じゃないけど、この辺り使うしか無いのかしら....

    madwifi も方向転換で HAL 使わなくなって、以前のものから仕切り直しっぽい。そうそう svn のリポジトリ が再構成 Repository restructured ¶ だそうだ。stable は svn switch http://svn.madwifi.org/madwifi/trunk だそうだ。

    2007年10月1日月曜日

    rtl8187 動作せず...

    iwconfig iwlist でソレナリの表示はされるものの
    ~# ip link set wlan0 up
    ~# dmesg | tail -n2
    phy0: RF Calibration Failed! 0
    ADDRCONF(NETDEV_UP): wlan0: link is not ready

    ~# ip link ls
    ....
    5: wmaster0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc ieee80211 qlen 1000
    link/ieee802.11 00:1b:2f:be:42:5c brd ff:ff:ff:ff:ff:ff
    6: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:1b:2f:be:42:5c brd ff:ff:ff:ff:ff:ff
    Monitor モードは可だが、Master モードは INVALID。の前に、デバイスのランプが点灯せず、動作していなさげ。む〜ん....

    2007年9月19日水曜日

    rtl8187

    何となく rc6-mm1 パッチだけあてて make menuconfig してみたところ、zd1211rw の mac80211 ありました。なので、近々? zd1211 でも Master あるいは Monitor mode にできるかも。

    ....とか言いつつ mac80211 & USB で何か無いかなぁ。と眺めていたところ rtl8187 なるデバイスが 2.6.23-rc にて使えるとの話。探した探した見付かった。個人輸入代行まで考えていたが 7月? 頃 NetGear の日本語版が発売。物は
    ネットギア・インターナショナル WG111 USB2.0 無線アダプタ WG111-300JPS
    との事で大凡 2,000- 程度。で rtl8187_dev.c の適当なところに
    {USB_DEVICE(0x0846, 0x4260)},
    を加えてあげて、認識した。が、個人的には USB2.0 only はチト辛い。ここから先は未。

    2007年8月6日月曜日

    zd1211rw のその後

    2.6.22 にて 802.11 スタックが新たに追加され、以前のものを softmac とか ieee80211。新しいモノを mac80211 と呼ぶらしい。で vanilla kernel では zd1211rw は以前の ieee80211 にしか対応していない。その後は? と検索してみると、新しい zd1211rw-mac80211 なるものの開発も始まっているらしい。曰く
    Although some driver-level code is still required,
    it does fill in many blanks in our feature table:
    it has stack-level support for master mode, ad-hoc, automatic rate adjustment, ...
    でも developers only だそうで。 git 使えない...日本語の Git 入門 大変ありがたいです。今後も頑張って下さい。

    2007年6月6日水曜日

    tcpdump で wlan

    tcpdump の filter expression でデータフレームだけ。こちら。バージョンまでひっくるめるならば
    (wlan[0] & 0x0F) == 0x08
    # radio header って、何見てわかったつもりになっていたっけ?
    # 2.6.22 で 802.11 stack を新しい mac80211 とすると zd1211 が出てこん。

    2007年2月22日木曜日

    zd1211rw の Master mode

    zd1211rw デバイスに対して iwconfig eth# mode Master とすると、エラー。ちょっと眺めると ioctl のリクエストコード SIOCSIWMODE については zd_mac.c:int zd_mac_set_mode() が処理。中を見ると
            switch (mode) {
    case IW_MODE_AUTO:
    case IW_MODE_ADHOC:
    case IW_MODE_INFRA:
    mac->netdev->type = ARPHRD_ETHER;
    break;
    case IW_MODE_MONITOR:
    mac->netdev->type = ARPHRD_IEEE80211_RADIOTAP;
    break;
    default:
    dev_dbg_f(zd_mac_dev(mac), "wrong mode %u\n", mode);
    return -EINVAL;
    }
    include/linux/wireless.h で定義されてる
    #define IW_MODE_MASTER  3       /* Synchronisation master or Access Point */
    は EINVAL 扱い。というわけで他力本願としては zd_mac.c をパッチの都度眺めるということで。