0

ある種の命名規則を使用して、アプリ モジュール間で一意の ID を配布する方法を見つけようとしています。
それぞれに、TC フィルター/クラスなどを作成するために使用できる ID の範囲を持たせたいと考えています。このページには次のように記載
されています。

u32 ハンドルは、実際には 800:0:3 のように書かれた 3 つの数字です。それらはすべて 16 進数です。

有効なフィルタ アイテム ハンドルの範囲は 1 ~ 16 進数です。

しかし、設定しようとするhandle 1:1:1 と失敗します。

u32 handle idモジュールからのの解析は次のiproute2-3.17.0とおりです: (必ずしもマシンにインストールされているバージョンとは限りません)

static int get_u32_handle(__u32 *handle, const char *str)
{
    __u32 htid=0, hash=0, nodeid=0;
    char *tmp = strchr(str, ':');

    if (tmp == NULL) {
        if (memcmp("0x", str, 2) == 0)
            return get_u32(handle, str, 16);
        return -1;
    }
    htid = strtoul(str, &tmp, 16);
    if (tmp == str && *str != ':' && *str != 0)
        return -1;
    if (htid>=0x1000)
        return -1;
    if (*tmp) {
        str = tmp+1;
        hash = strtoul(str, &tmp, 16);
        if (tmp == str && *str != ':' && *str != 0)
            return -1;
        if (hash>=0x100)
            return -1;
        if (*tmp) {
            str = tmp+1;
            nodeid = strtoul(str, &tmp, 16);
            if (tmp == str && *str != 0)
                return -1;
            if (nodeid>=0x1000)
                return -1;
        }
    }
    *handle = (htid<<20)|(hash<<12)|nodeid;
    return 0;
}

XXX:XXX:XXXと同じくらい長くなるように見えますxxx < 0x1000が、失敗します。(最初の部分 (800 でなければならない) だと思いますが、hash他の値は解析できません。

4

1 に答える 1