ieee80211_radiotap_iterator_init()
関数を使用ieee80211_radiotap_iterator_next()
しているコードがいくつかありますradiotap-parser.c
。
自分が何を間違っているのかわかりません。おそらく誰かが私を教育できますか? ドキュメントのサンプルコードをほぼ変更せずに使用しています。これは、私が達成しようとしていたものに非常によく適合します。
/* where packet is `const u_char *packet' */
struct ieee80211_radiotap_iterator rti;
struct ieee80211_radiotap_header *rth = ( struct ieee80211_radiotap_header * ) packet;
/* 802.11 frame starts here */
struct wi_frame *fr= ( struct wi_frame * ) ( packet + rth->it_len );
/* Set up the iteration */
int ret = ieee80211_radiotap_iterator_init(&rti, rth, rth->it_len);
/* Loop until we've consumed all the fields */
while(!ret) {
printf("Itteration: %d\n", count++);
ret = ieee80211_radiotap_iterator_next(&rti);
if(ret) {
/*
* The problem is here, I'm dropping into this clause with
* a value of `1` consistently, that doesn't match my platform's
* definition of EINVAL or ENOENT.
*/
continue;
}
switch(rti.this_arg_index) {
default:
printf("Constant: %d\n", *rti.this_arg);
break;
}
}
そのコードで何かを台無しにしたことの範囲は限られています。実装によると、実装のエラー状態のようには見えない1
から返されることに混乱していると思います。ieee80211_radiotap_iterator_next()
タイプ のパケットをフィルタリングして"(type mgt) and (not type mgt subtype beacon)"
いますが、データ リンクがDLT_IEEE802_11_RADIO
?