Changeset 8955


Ignore:
Timestamp:
02/06/08 19:28:17 (5 years ago)
Author:
BrainSlayer
Message:

now multicast works for multiple separated interfaces

Location:
src/router
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/router/services/networking/firewall.c

    r8829 r8955  
    634634          char *nmask = nvram_safe_get ("lan_netmask"); //assuming lan_netmask is valid 
    635635 
    636           loopmask = getmask(nmask); 
    637  
    638           save2file("-A POSTROUTING -o %s -m pkttype --pkt-type broadcast -j RETURN\n",lanface); 
    639           save2file("-A POSTROUTING -o %s -s %s0/%d -d %s0/%d -j MASQUERADE\n",lanface, lan_cclass, loopmask, lan_cclass, loopmask); 
     636          loopmask = getmask (nmask); 
     637 
     638          save2file 
     639            ("-A POSTROUTING -o %s -m pkttype --pkt-type broadcast -j RETURN\n", 
     640             lanface); 
     641          save2file 
     642            ("-A POSTROUTING -o %s -s %s0/%d -d %s0/%d -j MASQUERADE\n", 
     643             lanface, lan_cclass, loopmask, lan_cclass, loopmask); 
     644          char *next; 
     645          char dev[16]; 
     646          char var[80]; 
    640647#ifdef HAVE_MSSID 
    641648 
    642649#ifdef HAVE_MADWIFI 
    643   int i; 
    644  
    645   char *next; 
    646   char dev[16]; 
    647   char var[80]; 
    648   char wifivifs[16]; 
    649   int devcount = getdevicecount (); 
    650   for (i = 0; i < devcount; i++) 
    651     { 
    652       sprintf (wifivifs, "ath%d_vifs", i); 
    653       if (nvram_nmatch("0","ath%d_bridged",i)) 
    654       { 
    655           save2file("-A POSTROUTING -o ath%d -m pkttype --pkt-type broadcast -j RETURN\n",i); 
    656           save2file("-A POSTROUTING -o ath%d -s %s/%d -d %s/%d -j MASQUERADE\n",i, nvram_nget("ath%d_ipaddr",i), getmask(nvram_nget("ath%d_netmask",i)), nvram_nget("ath%d_ipaddr",i), getmask(nvram_nget("ath%d_netmask",i))); 
    657       } 
    658       char *vifs = nvram_safe_get (wifivifs); 
    659       if (vifs != NULL) 
    660         foreach (var, vifs, next) 
    661         { 
    662         if (nvram_nmatch("0","%s_bridged",var)) 
    663           { 
    664           save2file("-A POSTROUTING -o %s -m pkttype --pkt-type broadcast -j RETURN\n",var); 
    665           save2file("-A POSTROUTING -o %s -s %s/%d -d %s/%d -j MASQUERADE\n",var, nvram_nget("%s_ipaddr",var), getmask(nvram_nget("%s_netmask",var)), nvram_nget("%s_ipaddr",var), getmask(nvram_nget("%s_netmask",var))); 
    666           } 
    667         } 
    668     } 
     650          int i; 
     651 
     652          char wifivifs[16]; 
     653          int devcount = getdevicecount (); 
     654          for (i = 0; i < devcount; i++) 
     655            { 
     656              sprintf (wifivifs, "ath%d_vifs", i); 
     657              if (nvram_nmatch ("0", "ath%d_bridged", i)) 
     658                { 
     659                  save2file 
     660                    ("-A POSTROUTING -o ath%d -m pkttype --pkt-type broadcast -j RETURN\n", 
     661                     i); 
     662                  save2file 
     663                    ("-A POSTROUTING -o ath%d -s %s/%d -d %s/%d -j MASQUERADE\n", 
     664                     i, nvram_nget ("ath%d_ipaddr", i), 
     665                     getmask (nvram_nget ("ath%d_netmask", i)), 
     666                     nvram_nget ("ath%d_ipaddr", i), 
     667                     getmask (nvram_nget ("ath%d_netmask", i))); 
     668                } 
     669              char *vifs = nvram_safe_get (wifivifs); 
     670              if (vifs != NULL) 
     671                foreach (var, vifs, next) 
     672                { 
     673                  if (nvram_nmatch ("0", "%s_bridged", var)) 
     674                    { 
     675                      save2file 
     676                        ("-A POSTROUTING -o %s -m pkttype --pkt-type broadcast -j RETURN\n", 
     677                         var); 
     678                      save2file 
     679                        ("-A POSTROUTING -o %s -s %s/%d -d %s/%d -j MASQUERADE\n", 
     680                         var, nvram_nget ("%s_ipaddr", var), 
     681                         getmask (nvram_nget ("%s_netmask", var)), 
     682                         nvram_nget ("%s_ipaddr", var), 
     683                         getmask (nvram_nget ("%s_netmask", var))); 
     684                    } 
     685                } 
     686            } 
    669687#else 
    670   int i; 
    671   char *next; 
    672   char dev[16]; 
    673   char var[80]; 
    674   char wifivifs[16]; 
    675   int devcount = get_wl_instances (); 
    676   for (i = 0; i < devcount; i++) 
    677     { 
    678       sprintf (wifivifs, "wl%d_vifs", i); 
    679       char *iname = get_wl_instance_name (i); 
    680       if (nvram_nmatch("0","%s_bridged",iname)) 
    681       { 
    682           save2file("-A POSTROUTING -o %s -m pkttype --pkt-type broadcast -j RETURN\n",iname); 
    683           save2file("-A POSTROUTING -o %s -s %s/%d -d %s/%d -j MASQUERADE\n",iname, nvram_nget("%s_ipaddr",iname), getmask(nvram_nget("%s_netmask",iname)), nvram_nget("%s_ipaddr",iname), getmask(nvram_nget("%s_netmask",iname))); 
    684       } 
    685       char *vifs = nvram_safe_get (wifivifs); 
    686       if (vifs != NULL) 
    687         foreach (var, vifs, next) 
    688         { 
    689         if (nvram_nmatch("0","%s_bridged",var)) 
    690           { 
    691           save2file("-A POSTROUTING -o %s -m pkttype --pkt-type broadcast -j RETURN\n",var); 
    692           save2file("-A POSTROUTING -o %s -s %s/%d -d %s/%d -j MASQUERADE\n",var, nvram_nget("%s_ipaddr",var), getmask(nvram_nget("%s_netmask",var)), nvram_nget("%s_ipaddr",var), getmask(nvram_nget("%s_netmask",var))); 
    693           } 
    694         } 
    695     } 
    696 #endif 
    697  
    698  
    699 #endif 
     688          int i; 
     689          char wifivifs[16]; 
     690          int devcount = get_wl_instances (); 
     691          for (i = 0; i < devcount; i++) 
     692            { 
     693              sprintf (wifivifs, "wl%d_vifs", i); 
     694              char *iname = get_wl_instance_name (i); 
     695              if (nvram_nmatch ("0", "%s_bridged", iname)) 
     696                { 
     697                  save2file 
     698                    ("-A POSTROUTING -o %s -m pkttype --pkt-type broadcast -j RETURN\n", 
     699                     iname); 
     700                  save2file 
     701                    ("-A POSTROUTING -o %s -s %s/%d -d %s/%d -j MASQUERADE\n", 
     702                     iname, nvram_nget ("%s_ipaddr", iname), 
     703                     getmask (nvram_nget ("%s_netmask", iname)), 
     704                     nvram_nget ("%s_ipaddr", iname), 
     705                     getmask (nvram_nget ("%s_netmask", iname))); 
     706                } 
     707              char *vifs = nvram_safe_get (wifivifs); 
     708              if (vifs != NULL) 
     709                foreach (var, vifs, next) 
     710                { 
     711                  if (nvram_nmatch ("0", "%s_bridged", var)) 
     712                    { 
     713                      save2file 
     714                        ("-A POSTROUTING -o %s -m pkttype --pkt-type broadcast -j RETURN\n", 
     715                         var); 
     716                      save2file 
     717                        ("-A POSTROUTING -o %s -s %s/%d -d %s/%d -j MASQUERADE\n", 
     718                         var, nvram_nget ("%s_ipaddr", var), 
     719                         getmask (nvram_nget ("%s_netmask", var)), 
     720                         nvram_nget ("%s_ipaddr", var), 
     721                         getmask (nvram_nget ("%s_netmask", var))); 
     722                    } 
     723                } 
     724            } 
     725#endif 
     726 
     727 
     728#endif 
     729          char *vifs = nvram_safe_get ("lan_ifnames"); 
     730          if (vifs != NULL) 
     731            foreach (var, vifs, next) 
     732            { 
     733              if (nvram_nmatch ("0", "%s_bridged", var)) 
     734                { 
     735                  save2file 
     736                    ("-A POSTROUTING -o %s -m pkttype --pkt-type broadcast -j RETURN\n", 
     737                     var); 
     738                  save2file 
     739                    ("-A POSTROUTING -o %s -s %s/%d -d %s/%d -j MASQUERADE\n", 
     740                     var, nvram_nget ("%s_ipaddr", var), 
     741                     getmask (nvram_nget ("%s_netmask", var)), 
     742                     nvram_nget ("%s_ipaddr", var), 
     743                     getmask (nvram_nget ("%s_netmask", var))); 
     744                } 
     745            } 
    700746 
    701747#ifndef HAVE_MAGICBOX 
     
    17051751  /* IGMP query from WAN interface */ 
    17061752  save2file ("-A INPUT -p igmp -j %s\n", 
    1707              nvram_match ("block_multicast", "1") ? log_drop : TARG_PASS); 
     1753             doMultiCast()==0 ? log_drop : TARG_PASS); 
    17081754 
    17091755#ifdef HAVE_TFTP 
     
    17361782    save2file ("-A INPUT -i %s -m state --state NEW -j logaccept\n", buff); 
    17371783  } 
     1784  char dev[16]; 
     1785  char var[80]; 
    17381786#ifdef HAVE_MSSID 
    17391787 
     
    17411789  int i; 
    17421790 
    1743   char dev[16]; 
    1744   char var[80]; 
    17451791  char wifivifs[16]; 
    17461792  int devcount = getdevicecount (); 
     
    17481794    { 
    17491795      sprintf (wifivifs, "ath%d_vifs", i); 
    1750       if (nvram_nmatch("0","ath%d_bridged",i)) 
    1751       { 
    1752       save2file ("-A INPUT -i ath%d -j ACCEPT\n", i); 
    1753       } 
     1796      if (nvram_nmatch ("0", "ath%d_bridged", i)) 
     1797        { 
     1798          save2file ("-A INPUT -i ath%d -j ACCEPT\n", i); 
     1799        } 
    17541800      char *vifs = nvram_safe_get (wifivifs); 
    17551801      if (vifs != NULL) 
    17561802        foreach (var, vifs, next) 
    17571803        { 
    1758         if (nvram_nmatch("0","%s_bridged",var)) 
    1759           { 
    1760           save2file ("-A INPUT -i %s -j ACCEPT\n", var); 
    1761           } 
     1804          if (nvram_nmatch ("0", "%s_bridged", var)) 
     1805            { 
     1806              save2file ("-A INPUT -i %s -j ACCEPT\n", var); 
     1807            } 
    17621808        } 
    17631809    } 
    17641810#else 
    17651811  int i; 
    1766   char dev[16]; 
    1767   char var[80]; 
    17681812  char wifivifs[16]; 
    17691813  int devcount = get_wl_instances (); 
     
    17721816      sprintf (wifivifs, "wl%d_vifs", i); 
    17731817      char *iname = get_wl_instance_name (i); 
    1774       if (nvram_nmatch("0","%s_bridged",iname)) 
    1775       { 
    1776       save2file ("-A INPUT -i %s -j ACCEPT\n", iname); 
    1777       } 
     1818      if (nvram_nmatch ("0", "%s_bridged", iname)) 
     1819        { 
     1820          save2file ("-A INPUT -i %s -j ACCEPT\n", iname); 
     1821        } 
    17781822      char *vifs = nvram_safe_get (wifivifs); 
    17791823      if (vifs != NULL) 
    17801824        foreach (var, vifs, next) 
    17811825        { 
    1782         if (nvram_nmatch("0","%s_bridged",var)) 
    1783           { 
     1826          if (nvram_nmatch ("0", "%s_bridged", var)) 
     1827            { 
     1828              save2file ("-A INPUT -i %s -j ACCEPT\n", var); 
     1829            } 
     1830        } 
     1831    } 
     1832#endif 
     1833 
     1834 
     1835#endif 
     1836  char *vifs = nvram_safe_get ("lan_ifnames"); 
     1837  if (vifs != NULL) 
     1838    foreach (var, vifs, next) 
     1839    { 
     1840      if (nvram_nmatch ("0", "%s_bridged", var)) 
     1841        { 
    17841842          save2file ("-A INPUT -i %s -j ACCEPT\n", var); 
    1785           } 
    17861843        } 
    17871844    } 
    1788 #endif 
    1789  
    1790  
    1791 #endif 
    17921845 
    17931846 
     
    18211874{ 
    18221875 
    1823  
    1824 #ifdef HAVE_MSSID 
    1825  
    1826 #ifdef HAVE_MADWIFI 
    1827   int i; 
    1828  
    18291876  char *next; 
    18301877  char dev[16]; 
    18311878  char var[80]; 
     1879 
     1880#ifdef HAVE_MSSID 
     1881 
     1882#ifdef HAVE_MADWIFI 
     1883  int i; 
    18321884  char wifivifs[16]; 
    18331885  int devcount = getdevicecount (); 
     
    18351887    { 
    18361888      sprintf (wifivifs, "ath%d_vifs", i); 
    1837       if (nvram_nmatch("0","ath%d_bridged",i)) 
    1838       { 
    1839       save2file ("-A FORWARD -i ath%d -j ACCEPT\n", i); 
    1840       } 
     1889      if (nvram_nmatch ("0", "ath%d_bridged", i)) 
     1890        { 
     1891          save2file ("-A FORWARD -i ath%d -j ACCEPT\n", i); 
     1892        } 
    18411893      char *vifs = nvram_safe_get (wifivifs); 
    18421894      if (vifs != NULL) 
    18431895        foreach (var, vifs, next) 
    18441896        { 
    1845         if (nvram_nmatch("0","%s_bridged",var)) 
    1846           { 
    1847           save2file ("-A FORWARD -i %s -j ACCEPT\n", var); 
    1848           } 
     1897          if (nvram_nmatch ("0", "%s_bridged", var)) 
     1898            { 
     1899              save2file ("-A FORWARD -i %s -j ACCEPT\n", var); 
     1900            } 
    18491901        } 
    18501902    } 
    18511903#else 
    18521904  int i; 
    1853   char *next; 
    1854   char dev[16]; 
    1855   char var[80]; 
    18561905  char wifivifs[16]; 
    18571906  int devcount = get_wl_instances (); 
     
    18601909      sprintf (wifivifs, "wl%d_vifs", i); 
    18611910      char *iname = get_wl_instance_name (i); 
    1862       if (nvram_nmatch("0","%s_bridged",iname)) 
    1863       { 
    1864       save2file ("-A FORWARD -i %s -j ACCEPT\n", iname); 
    1865       } 
     1911      if (nvram_nmatch ("0", "%s_bridged", iname)) 
     1912        { 
     1913          save2file ("-A FORWARD -i %s -j ACCEPT\n", iname); 
     1914        } 
    18661915      char *vifs = nvram_safe_get (wifivifs); 
    18671916      if (vifs != NULL) 
    18681917        foreach (var, vifs, next) 
    18691918        { 
    1870         if (nvram_nmatch("0","%s_bridged",var)) 
    1871           { 
     1919          if (nvram_nmatch ("0", "%s_bridged", var)) 
     1920            { 
     1921              save2file ("-A FORWARD -i %s -j ACCEPT\n", var); 
     1922            } 
     1923        } 
     1924    } 
     1925#endif 
     1926 
     1927 
     1928#endif 
     1929  char *vifs = nvram_safe_get ("lan_ifnames"); 
     1930  if (vifs != NULL) 
     1931    foreach (var, vifs, next) 
     1932    { 
     1933      if (nvram_nmatch ("0", "%s_bridged", var)) 
     1934        { 
    18721935          save2file ("-A FORWARD -i %s -j ACCEPT\n", var); 
    1873           } 
    18741936        } 
    18751937    } 
    1876 #endif 
    1877  
    1878  
    1879 #endif 
    18801938  /* Accept the redirect, might be seen as INVALID, packets */ 
    18811939  save2file ("-A FORWARD -i %s -o %s -j ACCEPT\n", lanface, lanface); 
     
    20012059    } 
    20022060  /* ACCEPT packets for Multicast pass through */ 
    2003   if (nvram_match ("block_multicast", "0")) 
     2061  if (doMultiCast()>0) 
    20042062    save2file ("-A FORWARD -i %s -p udp -m udp --destination %s -j %s\n", 
    20052063               wanface, IP_MULTICAST, log_accept); 
     
    28422900stop_firewall (void) 
    28432901{ 
    2844   stop_anchorfree(); 
     2902  stop_anchorfree (); 
    28452903  /* Make sure the DMZ-LED is off (from service.c) */ 
    28462904  diag_led (DMZ, STOP_LED); 
  • src/router/services/services/igmp.c

    r8951 r8955  
    2727#include <syslog.h> 
    2828#include <signal.h> 
     29 
     30 
    2931int 
    3032start_igmp_proxy (void) 
  • src/router/shared/utils.c

    r8945 r8955  
    39783978  return loopmask; 
    39793979} 
     3980int doMultiCast(void) 
     3981{ 
     3982 char name[80], *next; 
     3983 int ifcount; 
     3984  if (nvram_match ("wan_proto", "disabled")) 
     3985    return 0; 
     3986  if (nvram_match ("block_multicast", "0")) 
     3987    { 
     3988      ifcount++; 
     3989    } 
     3990  foreach (name, nvram_safe_get ("lan_ifnames"), next) 
     3991  { 
     3992    if (nvram_nmatch ("0", "%s_bridged", name) 
     3993        && nvram_nmatch ("1", "%s_multicast", name)) 
     3994      { 
     3995        ifcount++; 
     3996      } 
     3997  } 
     3998 return ifcount; 
     3999} 
  • src/router/shared/utils.h

    r8945 r8955  
    524524 
    525525int getmask(char *netmask); 
     526int doMultiCast(void); 
     527 
    526528#define MAX_WDS_DEVS 10 
    527529#endif 
Note: See TracChangeset for help on using the changeset viewer.