Bind socketu na konkrétní síťovou kartu v C

M_D

  • ****
  • 340
    • Zobrazit profil
    • E-mail
Re:Bind socketu na konkrétní síťovou kartu v C
« Odpověď #15 kdy: Dnes v 14:47:11 »
Jan Novotný: A jak máš ty IP k těm síťovkám přiřazené? Uvádíš tři interfejsy a tři IP 192.168.1.51, 192.168.1.52, 192.168.1.53 a potřebu komunikovat přes třetí s iface name enp0s8. Bindneš v kódu k socketu daný iface enp0s8 a client IP 192.168.1.51. Nepatří k té třetí síťovce správně ta IP 192.168.1.53?

jjrsk: Ono ne vždy to standardní dělá co chci, občas se nějaká vylomenina hodí. :-) Třeba něčím podobným, v kombinaci s multicastem, tak obcházím nutnost mít switche s HSR (které stojí nechutný peníz a navíc mají obvykle moc málo portů) a stačí mi k tomu obyč switche s MSTP a 2 VLANy a mám také bezeztrátový přenos a "zero-time recovery" při selhání jednoho switche/propoje.


Re:Bind socketu na konkrétní síťovou kartu v C
« Odpověď #16 kdy: Dnes v 16:02:36 »
Jan Novotný: A jak máš ty IP k těm síťovkám přiřazené? Uvádíš tři interfejsy a tři IP 192.168.1.51, 192.168.1.52, 192.168.1.53 a potřebu komunikovat přes třetí s iface name enp0s8. Bindneš v kódu k socketu daný iface enp0s8 a client IP 192.168.1.51. Nepatří k té třetí síťovce správně ta IP 192.168.1.53?

Musel přijít ten co dává pozor... :-D

M_D

  • ****
  • 340
    • Zobrazit profil
    • E-mail
Re:Bind socketu na konkrétní síťovou kartu v C
« Odpověď #17 kdy: Dnes v 16:43:03 »
Já chválím za ten rp_filter - bez jeho vypnutí to nefunguje, pokud mám víc síťovek ve stejném IP segmentu. :-)
Jsem to zkusil pustit. Funguje to a data dojdou zpět do recvfrom(). Pokud binduji konkrétní iface a client IP, tak by měla být shoda toho IP a iface, datagram musí přijít tím bindnutým ifacem a navíc musí být vypnutý rp_filter pro daný iface (zkrátka musí souhlasit na příchozím daná IP a iface). Pokud jako odchozí IP dám jinou, než odpovídá na vynucený iface, tak ono to odejde přes bindnutý iface se zadanou IP, ale vlivem ARP a forward tabulky ve switchi se odpověď vrátí často jiným ifacem a je smůla (pokud se vrátí tím předepsaným, tak se data také doručí do recvfrom()). Je to celkem striktní v případě unicast provozu.