NetBSD pf(4) "set skip on lo" doesn't work with IPv6

NetBSD 標準の packet filter である pf(4) の設定でハマッた記録 多分 ipflter(4) も npf(4) もおんなじ問題ありそう(こなみ感)
3
enami tsugutomo @_enami

@jinmei @n_soda なるほど。では v6 では looutput にはアドレスの属する IF が渡ってくるのが正しい世界という方向でどう直すのがいいか考えて見ます。

2014-10-10 16:04:41
enami tsugutomo @_enami

nd6_output から looutput へ (origifp でなく) ifp のほうを渡すのに、m_pkthdr.rcvif を使うのはどうだろう。どうせ上書きしちゃうし。

2014-10-10 16:07:40
enami tsugutomo @_enami

L2 ヘッダがないから、そのままなら lo で tap するしかないのか。

2014-10-10 16:56:24
enami tsugutomo @_enami

問題は pfil のほうだよな。looutput で rcvif を origifp で上書きするので、受け取ったときには、あたかもじつIFのほうから来ているように見えているはず。一つは ip6_output で pfill_run_hooks に origifp を渡すこと。

2014-10-10 17:58:27
enami tsugutomo @_enami

でもそれだと、lo なら skip ってルールには引っかからなそう。

2014-10-10 17:59:28
tnozaki @tnozaki

Fのif_symloop()が気になるマン

2014-10-10 18:00:37
Kimihiro Nonaka/埜中 公博 @nonakap

USB Wi-Fi dongle 移植の為に sys/net80211 をチラ見したことがあるくらいか

2014-10-10 18:01:42
tnozaki @tnozaki

srcの下全部分からないマン

2014-10-10 18:04:48
enami tsugutomo @_enami

SIMPLEX な if のテストってどうすりゃいいのかしらん。

2014-10-10 18:09:16
enami tsugutomo @_enami

もしかして F の場合は、ip6_output で ifp = ether, origifp = lo, nd6_output で間接 に呼ばれるのは looutput でなくて ether_output, その中で LLE_IFADDR 立ってて if_simloop て流れ?

2014-10-11 12:12:14