rtnetlink_socket = socket(PF_NETLINK, int socket_type, NETLINK_ROUTE);
struct rtattr { unsigned short rta_len; /* Length of option */ unsigned short rta_type; /* Type of option */ /* Data follows */ };
これらの属性の操作は、 RTA_* マクロか libnetlink を通してのみ 行うべきである。 rtnetlink(3) を見よ。
struct ifinfomsg { unsigned char ifi_family; /* AF_UNSPEC */ unsigned short ifi_type; /* Device type */ int ifi_index; /* Interface index */ unsigned int ifi_flags; /* Device flags */ unsigned int ifi_change; /* change mask */ };
ifi_flags はデバイスのフラグである。 netdevice(7) を見よ。 ifi_index は他と重ならないインターフェースの index である。 ifi_change は将来の利用のために予約されており、常に 0xFFFFFFFF にセットすべきである。
ルーティング属性 | ||
rta_type | 値の型 | 説明 |
IFLA_UNSPEC | - | 指定されていない。 |
IFLA_ADDRESS | hardware address |
インターフェース L2 アドレス
|
IFLA_BROADCAST | hardware address |
L2 ブロードキャストアドレス
|
IFLA_IFNAME | asciiz string | デバイス名 |
IFLA_MTU | unsigned int | デバイスの MTU |
IFLA_LINK | int | リンクタイプ |
IFLA_QDISC | asciiz string | キューイングのルール |
IFLA_STATS |
下記参照
| インターフェースの統計 |
IFLA_STATS の値の型は struct net_device_stats である。
struct ifaddrmsg { unsigned char ifa_family; /* Address type */ unsigned char ifa_prefixlen; /* Prefixlength of address */ unsigned char ifa_flags; /* Address flags */ unsigned char ifa_scope; /* Address scope */ int ifa_index; /* Interface index */ };
ifa_family はアドレスファミリーのタイプである (現在は AF_INET または AF_INET6)。 ifa_prefixlen はアドレスのアドレスマスクの長さである (IPv4 のように、 そのファミリーで定義されている場合)。 ifa_scope はアドレスのスコープである。 ifa_index はアドレスが関連づけられているインターフェースの index である。 ifa_flags はフラグワードで、 二つめのアドレス (古い別名インターフェース) の場合は IFA_F_SECONDARY に、永続的なアドレスの場合は IFA_F_PERMANENT に適用される。ユーザーによってセットされるフラグと、 undocumented なフラグがある。
属性 | ||
rta_type | 値の型 | 説明 |
IFA_UNSPEC | - | 指定されていない |
IFA_ADDRESS | raw protocol address | インターフェースアドレス |
IFA_LOCAL | raw protocol address | ローカルアドレス |
IFA_LABEL | asciiz string | インターフェースの名前 |
IFA_BROADCAST | raw protocol address | ブロードキャストアドレス |
IFA_ANYCAST | raw protocol address | anycast アドレス |
IFA_CACHEINFO | struct ifa_cacheinfo | アドレス情報 |
struct rtmsg { unsigned char rtm_family; /* Address family of route */ unsigned char rtm_dst_len; /* Length of source */ unsigned char rtm_src_len; /* Length of destination */ unsigned char rtm_tos; /* TOS filter */ unsigned char rtm_table; /* Routing table ID */ unsigned char rtm_protocol; /* Routing protocol; see below */ unsigned char rtm_scope; /* See below */ unsigned char rtm_type; /* See below */ unsigned int rtm_flags; };
rtm_type | 経路のタイプ |
RTN_UNSPEC | 未知の経路 |
RTN_UNICAST | ゲートウェイまたはダイレクトな経路 |
RTN_LOCAL | ローカルインターフェースの経路 |
RTN_BROADCAST |
ローカルなブロードキャスト経路
(ブロードキャストとして送信される)
|
RTN_ANYCAST |
ローカルなブロードキャスト経路
(ユニキャストとして送信される)
|
RTN_MULTICAST | マルチキャスト経路 |
RTN_BLACKHOLE | パケットを捨てる経路 |
RTN_UNREACHABLE | 到達できない行き先 |
RTN_PROHIBIT | パケットを拒否する経路 |
RTN_THROW | 経路探索を別のテーブルで継続 |
RTN_NAT | ネットワークアドレスの変換ルール |
RTN_XRESOLVE |
外部レゾルバを参照 (実装されていない)
|
rtm_protocol | 経路の情報源 |
RTPROT_UNSPEC | 不明 |
RTPROT_REDIRECT |
ICMP リダイレクトによる (現在は用いられない)
|
RTPROT_KERNEL | カーネルによる |
RTPROT_BOOT | ブート時 |
RTPROT_STATIC | 管理者による |
RTPROT_STATIC よりも大きな値はカーネルによって解釈されない。これは 単なるユーザーへの情報である。これらは経路情報の情報源を タグ付けしたり、複数のルーティングデーモンからの情報を 区別するために用いることができる。 既に割り当てられているルーティングデーモンの識別子については <linux/rtnetlink.h> を見よ。
rtm_scope は行き先への距離である。
RT_SCOPE_UNIVERSE | グローバルな経路 |
RT_SCOPE_SITE |
ローカルな自律システムにおける内部経路
|
RT_SCOPE_LINK | このリンク上の経路 |
RT_SCOPE_HOST | ローカルホスト上の経路 |
RT_SCOPE_NOWHERE | 行き先が存在しない |
ユーザーは RT_SCOPE_UNIVERSE と RT_SCOPE_SITE の間の値を用いることができる。
rtm_flags は以下の意味を持つ:
RTM_F_NOTIFY |
経路が変更されると、 rtnetlink を通してユーザーに通知が行く。
|
RTM_F_CLONED | 経路は他の経路によって複製された。 |
RTM_F_EQUALIZE | マルチキャストイクォライザー (実装されていない) |
rtm_table ではルーティングテーブルを指定する。
RT_TABLE_UNSPEC | 指定されていないルーティングテーブル |
RT_TABLE_DEFAULT | デフォルトのテーブル |
RT_TABLE_MAIN | メインのテーブル |
RT_TABLE_LOCAL | ローカルテーブル |
ユーザーは RT_TABLE_UNSPEC と RT_TABLE_DEFAULT. の間の任意の値を用いることができる。
属性 | ||
rta_type | 値の型 | 説明 |
RTA_UNSPEC | - | 無視される |
RTA_DST | protocol address | 経路の行き先アドレス |
RTA_SRC | protocol address | 経路の発信元アドレス |
RTA_IIF | int | 入力インターフェースの index |
RTA_OIF | int | 出力インターフェースの index |
RTA_GATEWAY | protocol address | 経路のゲートウェイ |
RTA_PRIORITY | int | 経路の優先度 |
RTA_PREFSRC | ||
RTA_METRICS | int | 経路のメトリック |
RTA_MULTIPATH | ||
RTA_PROTOINFO | ||
RTA_FLOW | ||
RTA_CACHEINFO |
(これらの値を埋めること!)
struct ndmsg { unsigned char ndm_family; int ndm_ifindex; /* Interface index */ __u16 ndm_state; /* State */ __u8 ndm_flags; /* Flags */ __u8 ndm_type; }; struct nda_cacheinfo { __u32 ndm_confirmed; __u32 ndm_used; __u32 ndm_updated; __u32 ndm_refcnt; };
ndm_state は以下の状態のビットマスクである:
NUD_INCOMPLETE | 現在レゾルブ中のキャッシュエントリ |
NUD_REACHABLE | 動作確認済みのキャッシュエントリ |
NUD_STALE | 期限切れのキャッシュエントリ |
NUD_DELAY | タイマ待ちのキャッシュエントリ |
NUD_PROBE | 再確認中のキャッシュエントリ |
NUD_FAILED | 不正なキャッシュエントリ |
NUD_NOARP | 行き先キャッシュのないデバイス |
NUD_PERMANENT | 静的なエントリ |
有効な ndm_flags は以下の通り:
NTF_PROXY | プロクシ arp エントリ |
NTF_ROUTER | IPv6 ルータ |
(構造体メンバの記述をもうちょっと改良すること)
rtaddr 構造体は、 rta_type フィールドに応じてそれぞれ以下の意味を持つ:
NDA_UNSPEC | 未知のタイプ |
NDA_DST | 近傍キャッシュネットワーク層の行き先アドレス |
NDA_LLADDR | 近傍キャッシュリンク層のアドレス |
NDA_CACHEINFO | キャッシュの統計 |
rta_type フィールドが NDA_CACHEINFO の場合には、 struct nda_cacheinfo ヘッダが続く。
struct tcmsg { unsigned char tcm_family; int tcm_ifindex; /* interface index */ __u32 tcm_handle; /* Qdisc handle */ __u32 tcm_parent; /* Parent qdisc */ __u32 tcm_info; };
属性 | ||
rta_type | 値の型 | 説明 |
TCA_UNSPEC | - | 指定されていない |
TCA_KIND | asciiz string | キューイングルールの名前 |
TCA_OPTIONS | byte sequence | Qdisc 特有のオプションが続く |
TCA_STATS | struct tc_stats | Qdisc の統計 |
TCA_XSTATS | qdisc specific | モジュール特有の統計 |
TCA_RATE | struct tc_estimator | レート制限 |
さらに、 qdisc モジュール特有の様々な属性を指定できる。 詳細な情報は適切なインクルードファイルを見よ。