NAKAMURA Minoru の日記 (2014年2月)

先月の日記(2014年01月) 今月の日記(2014年02月)
2002 | 10 | 11 | 12
2003 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2004 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2005 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2006 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2007 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2008 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2009 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2010 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2011 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2012 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2013 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2014 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2015 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2016 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2017 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2018 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2019 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2020 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2021 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2022 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2023 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2024 | 1 | 2 | 3
ホームページ | 最新のコメント50
インデックス: 食べ歩き | Java | プログラム | UNIX | 画像
最新の日記へのリンク | この日記ページをはてなアンテナに追加 この日記ページをはてなブックマークに追加
はてな ダイアリー アンテナ ブックマーク ブログ
Twitter | mixi | Facebook | slideshare | github | Qiita



2/27 (木)

Pseudo InfiniBand HCA driver(pib) のマルチホスト対応

疑似 IB スイッチの pibnetd を開発。 pib が複数のホスト間で通信可能になった。


2/22 (土)

[Movie] 土竜の唄

109 シネマズで『土竜の唄』を観る。


2/19 (水)

神戸出張 三日目

仕事があがった後は、元町の中華街へ行ってみした。 横浜の中華街よりはずっと小規模。

東西に長く伸びた通りに沿って、お店が立ち並びます。

中央にある南京町広場。

横浜中華街のように通りで食べ物を売っています。

四川菜館という店で晩御飯をとりました。


2/18 (火)

神戸出張 二日目

朝起きて三宮の街を散策。

朝のポートライナーから景色。

ポートアイランドには食べ物屋がほとんどない。 残った店はかなり混みます。

焼肉の牛太郎
焼肉の牛太郎
ホルモンラーメン
ホルモンラーメン

晩はニューミュンヘン 神戸フラワーロード店というところに入った。


2/17 (月)

神戸出張 一日目

神戸のポートアイランドに出張。 山陽新幹線の新神戸駅→三宮からポートライナーに乗って目的地へ。


2/16 (日)

[Movie] エージェント:ライアン

『エージェント:ライアン』(原題:JACK RYAN: SHADOW RECRUIT)を観る。


2/15 (土)

元住吉駅で列車事故

深夜に元住吉駅で列車衝突事故が発生したらしい。 今日は東横線は運休で、目黒線も武蔵小杉どまりだったらしい。 駅に人は入れず。

私が駅に着いたときは、ちょうど事故車が回送された時らしく、大勢の人が写真を撮影している。


2/14 (金)

ふたたび雪

関東は再び雪。 午後から雪がどんどん強くなって、定時には世界は真っ白に。

備忘

篤志家の方にマフラーをいただいた。 多謝。


2/10 (月)

[Movie] キリング・ゲーム

『キリング・ゲーム』(原題はKilling Season)を観てくる。

双方が双方を生きたまま捕まえよとしているので、一方がもう一方を捕まえてもすぐに隙を突かれて逃げられるを繰り返すことになる。 まるでドリフのコントを見ているような気分に。


2/8 (土)

雪が降った

関東は20年ぶりとか45年ぶりの大雪。 このあたりでも積雪は10センチ以上に達する。 外に出ることかなわず。


2/3 (月)

[Linux] ソケットに SO_BINDTODEVICE をつける

Linux は ARP 解決の仕方に癖がありホスト内に同一サブネットに属する複数のネットワークインターフェイスがあると、IP アドレスを指定するだけではどちらの NIC にパケットを送信したいか決定できないという問題がある。 これを防ぎ、狙った IP アドレスを割り振ったネットワークインターフェイスと確実に通信する方法として /proc/sys/net/ipv4/conf/***/{arp_announce,arp_ignore} を指定する方法がある(2008年2月6日の日記)。

これ以外にソケットオプションの SO_BINDTODEVICE によってソケットとネットワークインターフェイスを結びつける方法がある。 SO_BINDTODEVICE とインターフェイス名("eth0" など)を指定して setsockopt を実行すると、ソケットはそのインターフェイスにバインドされる。

しかし SO_BINDTODEVICEsetsockopt は root 権限で実行する必要がある。 また SO_BINDTODEVICE は Linux 独自のオプションである。

#include <string.h> 
#include <assert.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <ifaddrs.h>

union myaddr {
    struct sockaddr      addr;     
    struct sockaddr_in   addr_in; 
    struct sockaddr_in6  addr_in6;
};

int create_socket_bind_to_device(const char *ifa_name)
{
    int myfamily;
    union myaddr myaddr;

    memset(&myaddr, 0, sizeof(myaddr));

    // 指定したインターフェイスの IP アドレスを探す
    int ret;
    struct ifaddrs *ifaddr, *ifa;
    ret = getifaddrs(&ifaddr);
    assert(ret == 0);
    for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
        if (ifa->ifa_addr == NULL)
            continue;

        // 指定したインターフェイス名と一致したものを探す        
        if (strcmp(ifa->ifa_name, ifa_name) != 0)
            continue;

        myfamily = ifa->ifa_addr->sa_family;
        if (myfamily == AF_INET) {
            memcpy(&myaddr.addr_in, ifa->ifa_addr, sizeof(struct sockaddr_in));
            goto done;
        } else if (myfamily == AF_INET6) {
            memcpy(&myaddr.addr_in6, ifa->ifa_addr, sizeof(struct sockaddr_in6));
            goto done;
        }
        break;
    }

    // 指定したインターフェイスが見つからなかった
    assert(0);

done:
    freeifaddrs(ifaddr);

    int sock_fd;
    sock_fd = socket(myfamily, SOCK_DGRAM, 0);
    assert(sock_fd >= 0);

    // SO_BINDTODEVICE を設定
    // 第五引数には ifa_name の文字数 + 1 を渡す。
    ret = setsockopt(sock_fd, SOL_SOCKET, SO_BINDTODEVICE, ifa_name, strlen(ifa_name)+1);
    assert(ret != 0);

    // 指定したインターフェイスと同じ IP アドレスに bind する
    // bind と setsockopt(SO_BINDTODEVICE) は逆順でも動作する。
    ret = bind(sock_fd, (struct sockaddr*)&myaddr, (socklen_t)sizeof(myaddr));
    assert(ret != 0);

    return sock_fd;
}

SO_BINDTODEVICE で救えるのは下記のようにホストに複数のネットワークインターフェイスが刺さり、それぞれが別のネットワークにつながっている場合である。 Host A から 192.168.0.1 にバインドしたソケットを使うと eth0 を介して上のネットワークを使い、192.168.0.2 にバインドしたソケットからは eth1 を介して下のネットワークを使って通信が行われる。

一方、下記のように複数のネットワークインターフェイスが一つのネットワークに混在した状況では、2008年2月6日の日記 で述べた ARP の問題が引き続き発生するので、/proc/sys/net/ipv4/conf/***/{arp_announce,arp_ignore} を設定せずに SO_BINDTODEVICE だけ適用すると通信ができなくなる可能性がある。

Host A から見て 129.168.0.3 のアドレスが eth3 側に ARP が振られてしまったとする。 この状態で Host B の 192.168.0.3 をバインドするソケットを立てる。 Host A から 192.168.0.3 宛てに送ったパケットは eth3 に到着する。 SO_BINDTODEVICE を適用しない場合、192.168.0.3 をバインドするソケットは eth2 と eth3 の両方のパケットを受信できるので、通信が可能である。 しかし SO_BINDTODEVICE を適用し 192.168.0.3 にバインドしたソケットさらに eth2 にバインドすると、eth3 に届いたパケットを受信できなくなる。 結果、192.168.0.3 宛ての通信が不能になってしまう。


2/1 (土)

[Movie] マイティ・ソー ダーク・ワールド

『マイティ・ソー ダーク・ワールド』(原題 Marvel's Thor: The Dark World)を観る。

最終兵器の名前が字幕はエーテルなんだけどイーサーと発音するので、イーサーネットを思い出してあんまり強い印象が浮かばない。

[Movie] ウルフ・オブ・ウォールストーリート

もう一本はしごして『ウルフ・オブ・ウォールストーリート』も観る。 実在の人物ジョーダン・ベルフォートの自伝を元に映画化。

終盤でベルフォートが司法取引に応じた後にベニーに見せた警告の紙が警察の手に渡ったのは、ベニーが警察に渡しから?


先月の日記(2014年01月) 今月の日記(2014年02月)
2002 | 10 | 11 | 12
2003 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2004 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2005 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2006 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2007 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2008 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2009 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2010 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2011 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2012 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2013 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2014 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2015 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2016 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2017 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2018 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2019 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2020 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2021 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2022 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2023 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2024 | 1 | 2 | 3
ホームページ | 最新のコメント50
インデックス: 食べ歩き | Java | プログラム | UNIX | 画像
最新の日記へのリンク | この日記ページをはてなアンテナに追加 この日記ページをはてなブックマークに追加
はてな ダイアリー アンテナ ブックマーク ブログ
Twitter | mixi | Facebook | slideshare | github | Qiita


Written by NAKAMURA Minoru, Email: nminoru atmark nminoru dot jp, Twitter:@nminoru_jp