それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

WiFiが複数バンド(5/2.4GHz)で飛んでるときに、明示的に2.4GHz のssidに接続する

macWiFi接続で 2.4Ghz を強制してみた

CoreWLANで 同一SSIDで 2.4 / 5 GHz が飛んでいる場合に、2.4GHz に接続をしてみた。

人が多い時に、あきらかに5GHzが使われて、2GHz帯が空いてそうなので、一度接続してみたいなと思って。

接続しようにもMacが5GHzを使うので、選択できないなと。CoreWLANを読んでたら、明示的につなげそうだったので、繋いでみた。

//
//  main.m
//  WiFi-testing
//
//  Created by takuya on 20171130.
//  Copyright © 2017年 takuya. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <CoreWLAN/CoreWLAN.h>
int main(int argc, const char * argv[]) {
  @autoreleasepool {

    CWWiFiClient *cw = [CWWiFiClient sharedWiFiClient];
    CWInterface *ci = cw.interface;
    NSSet *set = [ci scanForNetworksWithName:@"00_MCD-FREE-WIFI" error:NULL];

    // 2,4GHz is wlanChannel.channelBand == 1
    NSPredicate *pred2 = [NSPredicate predicateWithFormat:@"wlanChannel.channelBand == 1 ",set];
    CWNetwork *target = [[set filteredSetUsingPredicate:pred2] anyObject];
    printf("\nThe target is %s\n", [target.bssid UTF8String]);
        for (CWNetwork *i in set) {
          printf("%25s %8s %s % 5ld % 5ld % 5ld % 5lddBm \n",
                 [i.ssid UTF8String],
                 //2=>5Ghz 1=>2.4Ghz
                 ((i.wlanChannel.channelBand==kCWChannelBand5GHz)? "5GHz" : "2.4GHz"),
                 [i.bssid UTF8String],
                 i.rssiValue,
                 i.wlanChannel.channelWidth,
                 i.wlanChannel.channelNumber,
                 i.noiseMeasurement
                 );
        }


    [ci disassociate];
    [ci setPower:YES error:NULL];
    [ci disassociate];
    [ci setWLANChannel:target.wlanChannel error:NULL]; //チャンネルのデフォルトを2.4GHzにする
    [ci associateToNetwork:target password:NULL error:NULL];

  }
  return 0;
}

一応つながる

f:id:takuya_1st:20171208180446p:plain

しかし、すぐに5Ghzにされる。

しかし、接続中に、Macに2.4GHz → 5GHz にされてしまう。

同一SSIDで5GHzが飛んでたらそっちへつなぎ替えるプロセスが居るらしい。どれだ。。。

なんな、launchd から起動されているDAEMONを止めないとダメっぽいぞ。