Ermal Luçi wrote:
On Fri, Jul 31, 2009 at 7:36 PM, Evgeny
Yurchenko<[email protected]> wrote:
  
From: [email protected] [mailto:[email protected]] On
Behalf Of Chris Buechler

On Thu, Jul 30, 2009 at 8:33 PM, Evgeny
Yurchenko<[email protected]> wrote:
      
The code of igmpproxy is heavily inherited from mrouted and actual
proxying of IGMP-packets does not happen. It is not a
        
problem if mcast
      
sender on upstream interface does not care about
        
memberships and just
      
multicasts always, but if it is wise sender, or if sender
        
is located
      
in several routers upstream then IGMP is needed. So I fixed
        
this small issue for 1.2.2 (I have only this development
version). There was another problem with understanding
interfaces consisting of more than 3 letters (em1 - ok, bge1
- can't start), also fixed. Could somebody validate and put
my several lines of code in repository please? How does it
work at all - if somebody found solution for some problem, what to do?
      
You can send a patch here (diff -rub please) and I'm sure
Ermal will review (he does most of our C work, and did this multicast
implementation) and get it committed.

Thanks!

      
diff -rub original/igmpproxy/work/igmpproxy/src/config.c
igmpproxy/work/igmpproxy/src/config.c
--- original/igmpproxy/work/igmpproxy/src/config.c      2009-07-31
17:17:16.000000000 +0000
+++ igmpproxy/work/igmpproxy/src/config.c       2009-07-31
17:21:28.000000000 +0000
@@ -241,7 +241,7 @@
    tmpPtr->allowednets = NULL;

    // Make a copy of the token to store the IF name
-    tmpPtr->name = (char *)malloc( sizeof(char) * strlen(token) );
+    tmpPtr->name = (char *)malloc( sizeof(char) * strlen(token) + 1 );
    if(tmpPtr->name == NULL) {
        log(LOG_ERR, 0, "Out of memory.");
    }


diff -rub original/igmpproxy/work/igmpproxy/src/mcgroup.c
igmpproxy/work/igmpproxy/src/mcgroup.c
--- original/igmpproxy/work/igmpproxy/src/mcgroup.c     2009-07-31
17:17:16.000000000 +0000
+++ igmpproxy/work/igmpproxy/src/mcgroup.c      2009-07-31
17:11:00.000000000 +0000
@@ -63,13 +63,18 @@
    }
 #else
    if( setsockopt( UdpSock, IPPROTO_IP,
-          Cmd == 'j' ? IP_ADD_SOURCE_MEMBERSHIP :
IP_DROP_SOURCE_MEMBERSHIP,
+          Cmd == 'j' ? IP_ADD_MEMBERSHIP : IP_DROP_MEMBERSHIP,
          (void *)&CtlReq, sizeof( CtlReq ) ) )
    {
        log( LOG_WARNING, errno, "MRT_%s_MEMBERSHIP failed", Cmd == 'j'
? "ADD" : "DROP" );
        return 1;
    }
 #endif
+    /* We have to send IGMP packet on upstream interface */
+    if( Cmd == 'j' )
+       sendIgmp(0, mcastaddr, IGMP_V2_MEMBERSHIP_REPORT, 0, mcastaddr,
0);
+    else
+        sendIgmp(0, mcastaddr, IGMP_V2_LEAVE_GROUP, 0, mcastaddr, 0);

    return 0;
 }



diff -rub original/igmpproxy/work/igmpproxy/src/rttable.c
igmpproxy/work/igmpproxy/src/rttable.c
--- original/igmpproxy/work/igmpproxy/src/rttable.c     2009-07-31
17:17:16.000000000 +0000
+++ igmpproxy/work/igmpproxy/src/rttable.c      2009-07-31
17:25:18.000000000 +0000
@@ -344,12 +344,8 @@
                return 0;
            }
        }
-    }
-
-    // Send join message upstream, if the route has no joined flag...
-    if(croute->upstrState != ROUTESTATE_JOINED) {
-        // Send Join request upstream
-        sendJoinLeaveUpstream(croute, 1);
+        // Send join message upstream
+       sendIgmp(0, group, IGMP_V2_MEMBERSHIP_REPORT, 0, group, 0);
    }

    IF_DEBUG logRouteTable("Insert Route");


    
Slightly different version committed to the
port.(https://rcs.pfsense.org/projects/pfsense-tools/repos/mainline/commits/82204b23ead0d217382d49477bd72a7c0374841f)
Can you test this?

  
No, it does not include all my code modifications (includes only config.c), so it does not work.
Sorry guys but it seems I've just made something really stupid https://rcs.pfsense.org/projects/pfsense-tools/repos/Eugene-igmpproxy-clone/commits/899fb15389a94683e2b68c5e9f91c6e0d8edd5a8
Could you please remove this mess and explain me how do I get what I want. Modify several lines in code and see them in patch-fbsd for igmpproxy?
Thanks and sorry again.
--------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected] Commercial support available - https://portal.pfsense.org

Reply via email to