ba_list_class_names() - 管理されているインタフェースのクラス名を取得します。
#include <netinet/ba_stat.h> int ba_list_class_names ( const char *interface, /* interface name: le0, hme0, ... */ ba_class_pair_t *classes /* allocate buffer */ );
ba_list_class_names() 関数は、指定された管理対象インタフェースについて、設定されているすべてのクラス名とそれらの親のリストを取得します。root クラスの親は root です。
ba_list_class_names() 関数には次の引数を渡します。
|
interface |
管理されているインタフェース名が入った文字列を指すポインタ (le0、hih0、hme0 など) |
|
classes |
ba_class_pair_t 型の構造体の配列を指すポインタ。これは、クラス名が書き込まれるバッファーである。クラスと親のペアごとに構造体が 1 つ存在する |
ba_class_pair_t 型の構造体は次のように定義されています。
typedef struct {
ba_name_t parent; /* name of the parent */
ba_name_t child; /* name of the class */
} ba_class_pair_t;
|
ba_class_pair_t 型の構造体には、次のように定義されている ba_name_t 型の構造体のペアが入ります。
typedef struct {
char name[BA_NAMES_LEN + 1];
char padding[3];
u_short namelen;
char padding2[2];
} ba_name_t;
|
バッファーには、常にクラスの数に応じた十分なメモリーを割り当てる必要があります。次に例を示します。
int nclasses;
ba_class_pairs_t *classesp;
nclasses = ba_get_num_classes("hme0");
if (nclasses > 0) {
classesp = (ba_class_pairs_t *) calloc(nclasses,sizeof ba_class_pairs_t);
if (ba_list_class_names("hme0", classesp) != -1) {
/* process classesp ... */
} else {
/* error handling */
}
free(classesp);
}
|
ba_list_class_names() 関数は、正常に終了した場合には 0、エラー時には -1 を返します。
ba_get_list_class_names() 呼び出しの際にエラーが発生すると、変数 ba_errno は表 4-2 に示したエラーコードの 1 つに設定されます。