2016-04-20 7 views
0

Meine Anwendung sollte netlink Multicast-Route Updates vom Kernel erhalten. Ich habe einige Nachforschungen gemacht und festgestellt, dass mutlicast eine andere Familie verwendet: RTNL_FAMILY_IPMR und die Gruppe ist RTMGRP_IPV4_MROUTE.Linux netlink mutlicast Routing-Updates

Allerdings, wenn ich benutze:

sfd = socket (AF_NETLINK, SOCK_RAW, NETLINK_ROUTE); 
    snl.nl_groups |= RTMGRP_IPV4_MROUTE 

ich nicht irgendwelche Updates.

Aber

sfd = socket (AF_NETLINK, SOCK_RAW, NETLINK_ROUTE); 
    snl.nl_family = RTNL_FAMILY_IPMR; 
    snl.nl_groups |= RTMGRP_IPV4_MROUTE; 

Dieses binden Fehler geben“, bindet: Invalid argument

sfd = socket (RTNL_FAMILY_IPMR, SOCK_RAW, NETLINK_ROUTE); 

Diese geben "Address Familie nicht durch Protokoll unterstützt" Fehler

Ich bin nicht sicher, wie um Updates vom Kernel für Mutlicast-Routen zu erhalten

Antwort

0

Kopieren-Einfügen von früher Projekt Ich habe:

struct sockaddr_nl naddr; 

    netlinkfd = socket (AF_NETLINK, SOCK_RAW, NETLINK_ROUTE); 
    naddr.nl_family = AF_NETLINK; 
    naddr.nl_groups = (1 << (RTNLGRP_LINK - 1)) | 
         (1 << (RTNLGRP_IPV4_ROUTE - 1)) | 
         (1 << (RTNLGRP_IPV6_ROUTE - 1)) | 
         (1 << (RTNLGRP_IPV4_IFADDR - 1)) | 
         (1 << (RTNLGRP_IPV6_IFADDR -1)); 
    if (bind (netlinkfd, (struct sockaddr *)&naddr, sizeof (naddr))) 
    { 
     error_foo(); 
     return; 
    } 

Dieser funktioniert für mich Link, IP und Routing-Tabelle im Allgemeinen erhalten. (Drängen Sie mich alle Änderungen von diesem Punkt aus - wenn ich den aktuellen Status erhalten möchte, muss ich sie auch anfordern). Versuchen Sie, ROUTE und MROUTE zu haben, da Sie Multicast-Routingtabellen benötigen, die jedoch möglicherweise in die normale Routingtabelle

integriert werden
Verwandte Themen