br_multicast.c 28 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309
  1. /*
  2. * Bridge multicast support.
  3. *
  4. * Copyright (c) 2010 Herbert Xu <herbert@gondor.apana.org.au>
  5. *
  6. * This program is free software; you can redistribute it and/or modify it
  7. * under the terms of the GNU General Public License as published by the Free
  8. * Software Foundation; either version 2 of the License, or (at your option)
  9. * any later version.
  10. *
  11. */
  12. #include <linux/err.h>
  13. #include <linux/if_ether.h>
  14. #include <linux/igmp.h>
  15. #include <linux/jhash.h>
  16. #include <linux/kernel.h>
  17. #include <linux/log2.h>
  18. #include <linux/netdevice.h>
  19. #include <linux/netfilter_bridge.h>
  20. #include <linux/random.h>
  21. #include <linux/rculist.h>
  22. #include <linux/skbuff.h>
  23. #include <linux/slab.h>
  24. #include <linux/timer.h>
  25. #include <net/ip.h>
  26. #include "br_private.h"
  27. static inline int br_ip_hash(struct net_bridge_mdb_htable *mdb, __be32 ip)
  28. {
  29. return jhash_1word(mdb->secret, (u32)ip) & (mdb->max - 1);
  30. }
  31. static struct net_bridge_mdb_entry *__br_mdb_ip_get(
  32. struct net_bridge_mdb_htable *mdb, __be32 dst, int hash)
  33. {
  34. struct net_bridge_mdb_entry *mp;
  35. struct hlist_node *p;
  36. hlist_for_each_entry_rcu(mp, p, &mdb->mhash[hash], hlist[mdb->ver]) {
  37. if (dst == mp->addr)
  38. return mp;
  39. }
  40. return NULL;
  41. }
  42. static struct net_bridge_mdb_entry *br_mdb_ip_get(
  43. struct net_bridge_mdb_htable *mdb, __be32 dst)
  44. {
  45. if (!mdb)
  46. return NULL;
  47. return __br_mdb_ip_get(mdb, dst, br_ip_hash(mdb, dst));
  48. }
  49. struct net_bridge_mdb_entry *br_mdb_get(struct net_bridge *br,
  50. struct sk_buff *skb)
  51. {
  52. if (br->multicast_disabled)
  53. return NULL;
  54. switch (skb->protocol) {
  55. case htons(ETH_P_IP):
  56. if (BR_INPUT_SKB_CB(skb)->igmp)
  57. break;
  58. return br_mdb_ip_get(br->mdb, ip_hdr(skb)->daddr);
  59. }
  60. return NULL;
  61. }
  62. static void br_mdb_free(struct rcu_head *head)
  63. {
  64. struct net_bridge_mdb_htable *mdb =
  65. container_of(head, struct net_bridge_mdb_htable, rcu);
  66. struct net_bridge_mdb_htable *old = mdb->old;
  67. mdb->old = NULL;
  68. kfree(old->mhash);
  69. kfree(old);
  70. }
  71. static int br_mdb_copy(struct net_bridge_mdb_htable *new,
  72. struct net_bridge_mdb_htable *old,
  73. int elasticity)
  74. {
  75. struct net_bridge_mdb_entry *mp;
  76. struct hlist_node *p;
  77. int maxlen;
  78. int len;
  79. int i;
  80. for (i = 0; i < old->max; i++)
  81. hlist_for_each_entry(mp, p, &old->mhash[i], hlist[old->ver])
  82. hlist_add_head(&mp->hlist[new->ver],
  83. &new->mhash[br_ip_hash(new, mp->addr)]);
  84. if (!elasticity)
  85. return 0;
  86. maxlen = 0;
  87. for (i = 0; i < new->max; i++) {
  88. len = 0;
  89. hlist_for_each_entry(mp, p, &new->mhash[i], hlist[new->ver])
  90. len++;
  91. if (len > maxlen)
  92. maxlen = len;
  93. }
  94. return maxlen > elasticity ? -EINVAL : 0;
  95. }
  96. static void br_multicast_free_pg(struct rcu_head *head)
  97. {
  98. struct net_bridge_port_group *p =
  99. container_of(head, struct net_bridge_port_group, rcu);
  100. kfree(p);
  101. }
  102. static void br_multicast_free_group(struct rcu_head *head)
  103. {
  104. struct net_bridge_mdb_entry *mp =
  105. container_of(head, struct net_bridge_mdb_entry, rcu);
  106. kfree(mp);
  107. }
  108. static void br_multicast_group_expired(unsigned long data)
  109. {
  110. struct net_bridge_mdb_entry *mp = (void *)data;
  111. struct net_bridge *br = mp->br;
  112. struct net_bridge_mdb_htable *mdb;
  113. spin_lock(&br->multicast_lock);
  114. if (!netif_running(br->dev) || timer_pending(&mp->timer))
  115. goto out;
  116. if (!hlist_unhashed(&mp->mglist))
  117. hlist_del_init(&mp->mglist);
  118. if (mp->ports)
  119. goto out;
  120. mdb = br->mdb;
  121. hlist_del_rcu(&mp->hlist[mdb->ver]);
  122. mdb->size--;
  123. del_timer(&mp->query_timer);
  124. call_rcu_bh(&mp->rcu, br_multicast_free_group);
  125. out:
  126. spin_unlock(&br->multicast_lock);
  127. }
  128. static void br_multicast_del_pg(struct net_bridge *br,
  129. struct net_bridge_port_group *pg)
  130. {
  131. struct net_bridge_mdb_htable *mdb = br->mdb;
  132. struct net_bridge_mdb_entry *mp;
  133. struct net_bridge_port_group *p;
  134. struct net_bridge_port_group **pp;
  135. mp = br_mdb_ip_get(mdb, pg->addr);
  136. if (WARN_ON(!mp))
  137. return;
  138. for (pp = &mp->ports; (p = *pp); pp = &p->next) {
  139. if (p != pg)
  140. continue;
  141. *pp = p->next;
  142. hlist_del_init(&p->mglist);
  143. del_timer(&p->timer);
  144. del_timer(&p->query_timer);
  145. call_rcu_bh(&p->rcu, br_multicast_free_pg);
  146. if (!mp->ports && hlist_unhashed(&mp->mglist) &&
  147. netif_running(br->dev))
  148. mod_timer(&mp->timer, jiffies);
  149. return;
  150. }
  151. WARN_ON(1);
  152. }
  153. static void br_multicast_port_group_expired(unsigned long data)
  154. {
  155. struct net_bridge_port_group *pg = (void *)data;
  156. struct net_bridge *br = pg->port->br;
  157. spin_lock(&br->multicast_lock);
  158. if (!netif_running(br->dev) || timer_pending(&pg->timer) ||
  159. hlist_unhashed(&pg->mglist))
  160. goto out;
  161. br_multicast_del_pg(br, pg);
  162. out:
  163. spin_unlock(&br->multicast_lock);
  164. }
  165. static int br_mdb_rehash(struct net_bridge_mdb_htable **mdbp, int max,
  166. int elasticity)
  167. {
  168. struct net_bridge_mdb_htable *old = *mdbp;
  169. struct net_bridge_mdb_htable *mdb;
  170. int err;
  171. mdb = kmalloc(sizeof(*mdb), GFP_ATOMIC);
  172. if (!mdb)
  173. return -ENOMEM;
  174. mdb->max = max;
  175. mdb->old = old;
  176. mdb->mhash = kzalloc(max * sizeof(*mdb->mhash), GFP_ATOMIC);
  177. if (!mdb->mhash) {
  178. kfree(mdb);
  179. return -ENOMEM;
  180. }
  181. mdb->size = old ? old->size : 0;
  182. mdb->ver = old ? old->ver ^ 1 : 0;
  183. if (!old || elasticity)
  184. get_random_bytes(&mdb->secret, sizeof(mdb->secret));
  185. else
  186. mdb->secret = old->secret;
  187. if (!old)
  188. goto out;
  189. err = br_mdb_copy(mdb, old, elasticity);
  190. if (err) {
  191. kfree(mdb->mhash);
  192. kfree(mdb);
  193. return err;
  194. }
  195. call_rcu_bh(&mdb->rcu, br_mdb_free);
  196. out:
  197. rcu_assign_pointer(*mdbp, mdb);
  198. return 0;
  199. }
  200. static struct sk_buff *br_multicast_alloc_query(struct net_bridge *br,
  201. __be32 group)
  202. {
  203. struct sk_buff *skb;
  204. struct igmphdr *ih;
  205. struct ethhdr *eth;
  206. struct iphdr *iph;
  207. skb = netdev_alloc_skb_ip_align(br->dev, sizeof(*eth) + sizeof(*iph) +
  208. sizeof(*ih) + 4);
  209. if (!skb)
  210. goto out;
  211. skb->protocol = htons(ETH_P_IP);
  212. skb_reset_mac_header(skb);
  213. eth = eth_hdr(skb);
  214. memcpy(eth->h_source, br->dev->dev_addr, 6);
  215. eth->h_dest[0] = 1;
  216. eth->h_dest[1] = 0;
  217. eth->h_dest[2] = 0x5e;
  218. eth->h_dest[3] = 0;
  219. eth->h_dest[4] = 0;
  220. eth->h_dest[5] = 1;
  221. eth->h_proto = htons(ETH_P_IP);
  222. skb_put(skb, sizeof(*eth));
  223. skb_set_network_header(skb, skb->len);
  224. iph = ip_hdr(skb);
  225. iph->version = 4;
  226. iph->ihl = 6;
  227. iph->tos = 0xc0;
  228. iph->tot_len = htons(sizeof(*iph) + sizeof(*ih) + 4);
  229. iph->id = 0;
  230. iph->frag_off = htons(IP_DF);
  231. iph->ttl = 1;
  232. iph->protocol = IPPROTO_IGMP;
  233. iph->saddr = 0;
  234. iph->daddr = htonl(INADDR_ALLHOSTS_GROUP);
  235. ((u8 *)&iph[1])[0] = IPOPT_RA;
  236. ((u8 *)&iph[1])[1] = 4;
  237. ((u8 *)&iph[1])[2] = 0;
  238. ((u8 *)&iph[1])[3] = 0;
  239. ip_send_check(iph);
  240. skb_put(skb, 24);
  241. skb_set_transport_header(skb, skb->len);
  242. ih = igmp_hdr(skb);
  243. ih->type = IGMP_HOST_MEMBERSHIP_QUERY;
  244. ih->code = (group ? br->multicast_last_member_interval :
  245. br->multicast_query_response_interval) /
  246. (HZ / IGMP_TIMER_SCALE);
  247. ih->group = group;
  248. ih->csum = 0;
  249. ih->csum = ip_compute_csum((void *)ih, sizeof(struct igmphdr));
  250. skb_put(skb, sizeof(*ih));
  251. __skb_pull(skb, sizeof(*eth));
  252. out:
  253. return skb;
  254. }
  255. static void br_multicast_send_group_query(struct net_bridge_mdb_entry *mp)
  256. {
  257. struct net_bridge *br = mp->br;
  258. struct sk_buff *skb;
  259. skb = br_multicast_alloc_query(br, mp->addr);
  260. if (!skb)
  261. goto timer;
  262. netif_rx(skb);
  263. timer:
  264. if (++mp->queries_sent < br->multicast_last_member_count)
  265. mod_timer(&mp->query_timer,
  266. jiffies + br->multicast_last_member_interval);
  267. }
  268. static void br_multicast_group_query_expired(unsigned long data)
  269. {
  270. struct net_bridge_mdb_entry *mp = (void *)data;
  271. struct net_bridge *br = mp->br;
  272. spin_lock(&br->multicast_lock);
  273. if (!netif_running(br->dev) || hlist_unhashed(&mp->mglist) ||
  274. mp->queries_sent >= br->multicast_last_member_count)
  275. goto out;
  276. br_multicast_send_group_query(mp);
  277. out:
  278. spin_unlock(&br->multicast_lock);
  279. }
  280. static void br_multicast_send_port_group_query(struct net_bridge_port_group *pg)
  281. {
  282. struct net_bridge_port *port = pg->port;
  283. struct net_bridge *br = port->br;
  284. struct sk_buff *skb;
  285. skb = br_multicast_alloc_query(br, pg->addr);
  286. if (!skb)
  287. goto timer;
  288. br_deliver(port, skb);
  289. timer:
  290. if (++pg->queries_sent < br->multicast_last_member_count)
  291. mod_timer(&pg->query_timer,
  292. jiffies + br->multicast_last_member_interval);
  293. }
  294. static void br_multicast_port_group_query_expired(unsigned long data)
  295. {
  296. struct net_bridge_port_group *pg = (void *)data;
  297. struct net_bridge_port *port = pg->port;
  298. struct net_bridge *br = port->br;
  299. spin_lock(&br->multicast_lock);
  300. if (!netif_running(br->dev) || hlist_unhashed(&pg->mglist) ||
  301. pg->queries_sent >= br->multicast_last_member_count)
  302. goto out;
  303. br_multicast_send_port_group_query(pg);
  304. out:
  305. spin_unlock(&br->multicast_lock);
  306. }
  307. static struct net_bridge_mdb_entry *br_multicast_get_group(
  308. struct net_bridge *br, struct net_bridge_port *port, __be32 group,
  309. int hash)
  310. {
  311. struct net_bridge_mdb_htable *mdb = br->mdb;
  312. struct net_bridge_mdb_entry *mp;
  313. struct hlist_node *p;
  314. unsigned count = 0;
  315. unsigned max;
  316. int elasticity;
  317. int err;
  318. hlist_for_each_entry(mp, p, &mdb->mhash[hash], hlist[mdb->ver]) {
  319. count++;
  320. if (unlikely(group == mp->addr)) {
  321. return mp;
  322. }
  323. }
  324. elasticity = 0;
  325. max = mdb->max;
  326. if (unlikely(count > br->hash_elasticity && count)) {
  327. if (net_ratelimit())
  328. printk(KERN_INFO "%s: Multicast hash table "
  329. "chain limit reached: %s\n",
  330. br->dev->name, port ? port->dev->name :
  331. br->dev->name);
  332. elasticity = br->hash_elasticity;
  333. }
  334. if (mdb->size >= max) {
  335. max *= 2;
  336. if (unlikely(max >= br->hash_max)) {
  337. printk(KERN_WARNING "%s: Multicast hash table maximum "
  338. "reached, disabling snooping: %s, %d\n",
  339. br->dev->name, port ? port->dev->name :
  340. br->dev->name,
  341. max);
  342. err = -E2BIG;
  343. disable:
  344. br->multicast_disabled = 1;
  345. goto err;
  346. }
  347. }
  348. if (max > mdb->max || elasticity) {
  349. if (mdb->old) {
  350. if (net_ratelimit())
  351. printk(KERN_INFO "%s: Multicast hash table "
  352. "on fire: %s\n",
  353. br->dev->name, port ? port->dev->name :
  354. br->dev->name);
  355. err = -EEXIST;
  356. goto err;
  357. }
  358. err = br_mdb_rehash(&br->mdb, max, elasticity);
  359. if (err) {
  360. printk(KERN_WARNING "%s: Cannot rehash multicast "
  361. "hash table, disabling snooping: "
  362. "%s, %d, %d\n",
  363. br->dev->name, port ? port->dev->name :
  364. br->dev->name,
  365. mdb->size, err);
  366. goto disable;
  367. }
  368. err = -EAGAIN;
  369. goto err;
  370. }
  371. return NULL;
  372. err:
  373. mp = ERR_PTR(err);
  374. return mp;
  375. }
  376. static struct net_bridge_mdb_entry *br_multicast_new_group(
  377. struct net_bridge *br, struct net_bridge_port *port, __be32 group)
  378. {
  379. struct net_bridge_mdb_htable *mdb = br->mdb;
  380. struct net_bridge_mdb_entry *mp;
  381. int hash;
  382. if (!mdb) {
  383. if (br_mdb_rehash(&br->mdb, BR_HASH_SIZE, 0))
  384. return NULL;
  385. goto rehash;
  386. }
  387. hash = br_ip_hash(mdb, group);
  388. mp = br_multicast_get_group(br, port, group, hash);
  389. switch (PTR_ERR(mp)) {
  390. case 0:
  391. break;
  392. case -EAGAIN:
  393. rehash:
  394. mdb = br->mdb;
  395. hash = br_ip_hash(mdb, group);
  396. break;
  397. default:
  398. goto out;
  399. }
  400. mp = kzalloc(sizeof(*mp), GFP_ATOMIC);
  401. if (unlikely(!mp))
  402. goto out;
  403. mp->br = br;
  404. mp->addr = group;
  405. setup_timer(&mp->timer, br_multicast_group_expired,
  406. (unsigned long)mp);
  407. setup_timer(&mp->query_timer, br_multicast_group_query_expired,
  408. (unsigned long)mp);
  409. hlist_add_head_rcu(&mp->hlist[mdb->ver], &mdb->mhash[hash]);
  410. mdb->size++;
  411. out:
  412. return mp;
  413. }
  414. static int br_multicast_add_group(struct net_bridge *br,
  415. struct net_bridge_port *port, __be32 group)
  416. {
  417. struct net_bridge_mdb_entry *mp;
  418. struct net_bridge_port_group *p;
  419. struct net_bridge_port_group **pp;
  420. unsigned long now = jiffies;
  421. int err;
  422. if (ipv4_is_local_multicast(group))
  423. return 0;
  424. spin_lock(&br->multicast_lock);
  425. if (!netif_running(br->dev) ||
  426. (port && port->state == BR_STATE_DISABLED))
  427. goto out;
  428. mp = br_multicast_new_group(br, port, group);
  429. err = PTR_ERR(mp);
  430. if (unlikely(IS_ERR(mp) || !mp))
  431. goto err;
  432. if (!port) {
  433. hlist_add_head(&mp->mglist, &br->mglist);
  434. mod_timer(&mp->timer, now + br->multicast_membership_interval);
  435. goto out;
  436. }
  437. for (pp = &mp->ports; (p = *pp); pp = &p->next) {
  438. if (p->port == port)
  439. goto found;
  440. if ((unsigned long)p->port < (unsigned long)port)
  441. break;
  442. }
  443. p = kzalloc(sizeof(*p), GFP_ATOMIC);
  444. err = -ENOMEM;
  445. if (unlikely(!p))
  446. goto err;
  447. p->addr = group;
  448. p->port = port;
  449. p->next = *pp;
  450. hlist_add_head(&p->mglist, &port->mglist);
  451. setup_timer(&p->timer, br_multicast_port_group_expired,
  452. (unsigned long)p);
  453. setup_timer(&p->query_timer, br_multicast_port_group_query_expired,
  454. (unsigned long)p);
  455. rcu_assign_pointer(*pp, p);
  456. found:
  457. mod_timer(&p->timer, now + br->multicast_membership_interval);
  458. out:
  459. err = 0;
  460. err:
  461. spin_unlock(&br->multicast_lock);
  462. return err;
  463. }
  464. static void br_multicast_router_expired(unsigned long data)
  465. {
  466. struct net_bridge_port *port = (void *)data;
  467. struct net_bridge *br = port->br;
  468. spin_lock(&br->multicast_lock);
  469. if (port->multicast_router != 1 ||
  470. timer_pending(&port->multicast_router_timer) ||
  471. hlist_unhashed(&port->rlist))
  472. goto out;
  473. hlist_del_init_rcu(&port->rlist);
  474. out:
  475. spin_unlock(&br->multicast_lock);
  476. }
  477. static void br_multicast_local_router_expired(unsigned long data)
  478. {
  479. }
  480. static void br_multicast_send_query(struct net_bridge *br,
  481. struct net_bridge_port *port, u32 sent)
  482. {
  483. unsigned long time;
  484. struct sk_buff *skb;
  485. if (!netif_running(br->dev) || br->multicast_disabled ||
  486. timer_pending(&br->multicast_querier_timer))
  487. return;
  488. skb = br_multicast_alloc_query(br, 0);
  489. if (!skb)
  490. goto timer;
  491. if (port) {
  492. __skb_push(skb, sizeof(struct ethhdr));
  493. skb->dev = port->dev;
  494. NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_OUT, skb, NULL, skb->dev,
  495. dev_queue_xmit);
  496. } else
  497. netif_rx(skb);
  498. timer:
  499. time = jiffies;
  500. time += sent < br->multicast_startup_query_count ?
  501. br->multicast_startup_query_interval :
  502. br->multicast_query_interval;
  503. mod_timer(port ? &port->multicast_query_timer :
  504. &br->multicast_query_timer, time);
  505. }
  506. static void br_multicast_port_query_expired(unsigned long data)
  507. {
  508. struct net_bridge_port *port = (void *)data;
  509. struct net_bridge *br = port->br;
  510. spin_lock(&br->multicast_lock);
  511. if (port->state == BR_STATE_DISABLED ||
  512. port->state == BR_STATE_BLOCKING)
  513. goto out;
  514. if (port->multicast_startup_queries_sent <
  515. br->multicast_startup_query_count)
  516. port->multicast_startup_queries_sent++;
  517. br_multicast_send_query(port->br, port,
  518. port->multicast_startup_queries_sent);
  519. out:
  520. spin_unlock(&br->multicast_lock);
  521. }
  522. void br_multicast_add_port(struct net_bridge_port *port)
  523. {
  524. port->multicast_router = 1;
  525. setup_timer(&port->multicast_router_timer, br_multicast_router_expired,
  526. (unsigned long)port);
  527. setup_timer(&port->multicast_query_timer,
  528. br_multicast_port_query_expired, (unsigned long)port);
  529. }
  530. void br_multicast_del_port(struct net_bridge_port *port)
  531. {
  532. del_timer_sync(&port->multicast_router_timer);
  533. }
  534. static void __br_multicast_enable_port(struct net_bridge_port *port)
  535. {
  536. port->multicast_startup_queries_sent = 0;
  537. if (try_to_del_timer_sync(&port->multicast_query_timer) >= 0 ||
  538. del_timer(&port->multicast_query_timer))
  539. mod_timer(&port->multicast_query_timer, jiffies);
  540. }
  541. void br_multicast_enable_port(struct net_bridge_port *port)
  542. {
  543. struct net_bridge *br = port->br;
  544. spin_lock(&br->multicast_lock);
  545. if (br->multicast_disabled || !netif_running(br->dev))
  546. goto out;
  547. __br_multicast_enable_port(port);
  548. out:
  549. spin_unlock(&br->multicast_lock);
  550. }
  551. void br_multicast_disable_port(struct net_bridge_port *port)
  552. {
  553. struct net_bridge *br = port->br;
  554. struct net_bridge_port_group *pg;
  555. struct hlist_node *p, *n;
  556. spin_lock(&br->multicast_lock);
  557. hlist_for_each_entry_safe(pg, p, n, &port->mglist, mglist)
  558. br_multicast_del_pg(br, pg);
  559. if (!hlist_unhashed(&port->rlist))
  560. hlist_del_init_rcu(&port->rlist);
  561. del_timer(&port->multicast_router_timer);
  562. del_timer(&port->multicast_query_timer);
  563. spin_unlock(&br->multicast_lock);
  564. }
  565. static int br_multicast_igmp3_report(struct net_bridge *br,
  566. struct net_bridge_port *port,
  567. struct sk_buff *skb)
  568. {
  569. struct igmpv3_report *ih;
  570. struct igmpv3_grec *grec;
  571. int i;
  572. int len;
  573. int num;
  574. int type;
  575. int err = 0;
  576. __be32 group;
  577. if (!pskb_may_pull(skb, sizeof(*ih)))
  578. return -EINVAL;
  579. ih = igmpv3_report_hdr(skb);
  580. num = ntohs(ih->ngrec);
  581. len = sizeof(*ih);
  582. for (i = 0; i < num; i++) {
  583. len += sizeof(*grec);
  584. if (!pskb_may_pull(skb, len))
  585. return -EINVAL;
  586. grec = (void *)(skb->data + len - sizeof(*grec));
  587. group = grec->grec_mca;
  588. type = grec->grec_type;
  589. len += ntohs(grec->grec_nsrcs) * 4;
  590. if (!pskb_may_pull(skb, len))
  591. return -EINVAL;
  592. /* We treat this as an IGMPv2 report for now. */
  593. switch (type) {
  594. case IGMPV3_MODE_IS_INCLUDE:
  595. case IGMPV3_MODE_IS_EXCLUDE:
  596. case IGMPV3_CHANGE_TO_INCLUDE:
  597. case IGMPV3_CHANGE_TO_EXCLUDE:
  598. case IGMPV3_ALLOW_NEW_SOURCES:
  599. case IGMPV3_BLOCK_OLD_SOURCES:
  600. break;
  601. default:
  602. continue;
  603. }
  604. err = br_multicast_add_group(br, port, group);
  605. if (err)
  606. break;
  607. }
  608. return err;
  609. }
  610. static void br_multicast_add_router(struct net_bridge *br,
  611. struct net_bridge_port *port)
  612. {
  613. struct hlist_node *p;
  614. struct hlist_node **h;
  615. for (h = &br->router_list.first;
  616. (p = *h) &&
  617. (unsigned long)container_of(p, struct net_bridge_port, rlist) >
  618. (unsigned long)port;
  619. h = &p->next)
  620. ;
  621. port->rlist.pprev = h;
  622. port->rlist.next = p;
  623. rcu_assign_pointer(*h, &port->rlist);
  624. if (p)
  625. p->pprev = &port->rlist.next;
  626. }
  627. static void br_multicast_mark_router(struct net_bridge *br,
  628. struct net_bridge_port *port)
  629. {
  630. unsigned long now = jiffies;
  631. if (!port) {
  632. if (br->multicast_router == 1)
  633. mod_timer(&br->multicast_router_timer,
  634. now + br->multicast_querier_interval);
  635. return;
  636. }
  637. if (port->multicast_router != 1)
  638. return;
  639. if (!hlist_unhashed(&port->rlist))
  640. goto timer;
  641. br_multicast_add_router(br, port);
  642. timer:
  643. mod_timer(&port->multicast_router_timer,
  644. now + br->multicast_querier_interval);
  645. }
  646. static void br_multicast_query_received(struct net_bridge *br,
  647. struct net_bridge_port *port,
  648. __be32 saddr)
  649. {
  650. if (saddr)
  651. mod_timer(&br->multicast_querier_timer,
  652. jiffies + br->multicast_querier_interval);
  653. else if (timer_pending(&br->multicast_querier_timer))
  654. return;
  655. br_multicast_mark_router(br, port);
  656. }
  657. static int br_multicast_query(struct net_bridge *br,
  658. struct net_bridge_port *port,
  659. struct sk_buff *skb)
  660. {
  661. struct iphdr *iph = ip_hdr(skb);
  662. struct igmphdr *ih = igmp_hdr(skb);
  663. struct net_bridge_mdb_entry *mp;
  664. struct igmpv3_query *ih3;
  665. struct net_bridge_port_group *p;
  666. struct net_bridge_port_group **pp;
  667. unsigned long max_delay;
  668. unsigned long now = jiffies;
  669. __be32 group;
  670. int err = 0;
  671. spin_lock(&br->multicast_lock);
  672. if (!netif_running(br->dev) ||
  673. (port && port->state == BR_STATE_DISABLED))
  674. goto out;
  675. br_multicast_query_received(br, port, iph->saddr);
  676. group = ih->group;
  677. if (skb->len == sizeof(*ih)) {
  678. max_delay = ih->code * (HZ / IGMP_TIMER_SCALE);
  679. if (!max_delay) {
  680. max_delay = 10 * HZ;
  681. group = 0;
  682. }
  683. } else {
  684. if (!pskb_may_pull(skb, sizeof(struct igmpv3_query))) {
  685. err = -EINVAL;
  686. goto out;
  687. }
  688. ih3 = igmpv3_query_hdr(skb);
  689. if (ih3->nsrcs)
  690. goto out;
  691. max_delay = ih3->code ?
  692. IGMPV3_MRC(ih3->code) * (HZ / IGMP_TIMER_SCALE) : 1;
  693. }
  694. if (!group)
  695. goto out;
  696. mp = br_mdb_ip_get(br->mdb, group);
  697. if (!mp)
  698. goto out;
  699. max_delay *= br->multicast_last_member_count;
  700. if (!hlist_unhashed(&mp->mglist) &&
  701. (timer_pending(&mp->timer) ?
  702. time_after(mp->timer.expires, now + max_delay) :
  703. try_to_del_timer_sync(&mp->timer) >= 0))
  704. mod_timer(&mp->timer, now + max_delay);
  705. for (pp = &mp->ports; (p = *pp); pp = &p->next) {
  706. if (timer_pending(&p->timer) ?
  707. time_after(p->timer.expires, now + max_delay) :
  708. try_to_del_timer_sync(&p->timer) >= 0)
  709. mod_timer(&mp->timer, now + max_delay);
  710. }
  711. out:
  712. spin_unlock(&br->multicast_lock);
  713. return err;
  714. }
  715. static void br_multicast_leave_group(struct net_bridge *br,
  716. struct net_bridge_port *port,
  717. __be32 group)
  718. {
  719. struct net_bridge_mdb_htable *mdb;
  720. struct net_bridge_mdb_entry *mp;
  721. struct net_bridge_port_group *p;
  722. unsigned long now;
  723. unsigned long time;
  724. if (ipv4_is_local_multicast(group))
  725. return;
  726. spin_lock(&br->multicast_lock);
  727. if (!netif_running(br->dev) ||
  728. (port && port->state == BR_STATE_DISABLED) ||
  729. timer_pending(&br->multicast_querier_timer))
  730. goto out;
  731. mdb = br->mdb;
  732. mp = br_mdb_ip_get(mdb, group);
  733. if (!mp)
  734. goto out;
  735. now = jiffies;
  736. time = now + br->multicast_last_member_count *
  737. br->multicast_last_member_interval;
  738. if (!port) {
  739. if (!hlist_unhashed(&mp->mglist) &&
  740. (timer_pending(&mp->timer) ?
  741. time_after(mp->timer.expires, time) :
  742. try_to_del_timer_sync(&mp->timer) >= 0)) {
  743. mod_timer(&mp->timer, time);
  744. mp->queries_sent = 0;
  745. mod_timer(&mp->query_timer, now);
  746. }
  747. goto out;
  748. }
  749. for (p = mp->ports; p; p = p->next) {
  750. if (p->port != port)
  751. continue;
  752. if (!hlist_unhashed(&p->mglist) &&
  753. (timer_pending(&p->timer) ?
  754. time_after(p->timer.expires, time) :
  755. try_to_del_timer_sync(&p->timer) >= 0)) {
  756. mod_timer(&p->timer, time);
  757. p->queries_sent = 0;
  758. mod_timer(&p->query_timer, now);
  759. }
  760. break;
  761. }
  762. out:
  763. spin_unlock(&br->multicast_lock);
  764. }
  765. static int br_multicast_ipv4_rcv(struct net_bridge *br,
  766. struct net_bridge_port *port,
  767. struct sk_buff *skb)
  768. {
  769. struct sk_buff *skb2 = skb;
  770. struct iphdr *iph;
  771. struct igmphdr *ih;
  772. unsigned len;
  773. unsigned offset;
  774. int err;
  775. /* We treat OOM as packet loss for now. */
  776. if (!pskb_may_pull(skb, sizeof(*iph)))
  777. return -EINVAL;
  778. iph = ip_hdr(skb);
  779. if (iph->ihl < 5 || iph->version != 4)
  780. return -EINVAL;
  781. if (!pskb_may_pull(skb, ip_hdrlen(skb)))
  782. return -EINVAL;
  783. iph = ip_hdr(skb);
  784. if (unlikely(ip_fast_csum((u8 *)iph, iph->ihl)))
  785. return -EINVAL;
  786. if (iph->protocol != IPPROTO_IGMP)
  787. return 0;
  788. len = ntohs(iph->tot_len);
  789. if (skb->len < len || len < ip_hdrlen(skb))
  790. return -EINVAL;
  791. if (skb->len > len) {
  792. skb2 = skb_clone(skb, GFP_ATOMIC);
  793. if (!skb2)
  794. return -ENOMEM;
  795. err = pskb_trim_rcsum(skb2, len);
  796. if (err)
  797. goto err_out;
  798. }
  799. len -= ip_hdrlen(skb2);
  800. offset = skb_network_offset(skb2) + ip_hdrlen(skb2);
  801. __skb_pull(skb2, offset);
  802. skb_reset_transport_header(skb2);
  803. err = -EINVAL;
  804. if (!pskb_may_pull(skb2, sizeof(*ih)))
  805. goto out;
  806. iph = ip_hdr(skb2);
  807. switch (skb2->ip_summed) {
  808. case CHECKSUM_COMPLETE:
  809. if (!csum_fold(skb2->csum))
  810. break;
  811. /* fall through */
  812. case CHECKSUM_NONE:
  813. skb2->csum = 0;
  814. if (skb_checksum_complete(skb2))
  815. goto out;
  816. }
  817. err = 0;
  818. BR_INPUT_SKB_CB(skb)->igmp = 1;
  819. ih = igmp_hdr(skb2);
  820. switch (ih->type) {
  821. case IGMP_HOST_MEMBERSHIP_REPORT:
  822. case IGMPV2_HOST_MEMBERSHIP_REPORT:
  823. BR_INPUT_SKB_CB(skb2)->mrouters_only = 1;
  824. err = br_multicast_add_group(br, port, ih->group);
  825. break;
  826. case IGMPV3_HOST_MEMBERSHIP_REPORT:
  827. err = br_multicast_igmp3_report(br, port, skb2);
  828. break;
  829. case IGMP_HOST_MEMBERSHIP_QUERY:
  830. err = br_multicast_query(br, port, skb2);
  831. break;
  832. case IGMP_HOST_LEAVE_MESSAGE:
  833. br_multicast_leave_group(br, port, ih->group);
  834. break;
  835. }
  836. out:
  837. __skb_push(skb2, offset);
  838. err_out:
  839. if (skb2 != skb)
  840. kfree_skb(skb2);
  841. return err;
  842. }
  843. int br_multicast_rcv(struct net_bridge *br, struct net_bridge_port *port,
  844. struct sk_buff *skb)
  845. {
  846. BR_INPUT_SKB_CB(skb)->igmp = 0;
  847. BR_INPUT_SKB_CB(skb)->mrouters_only = 0;
  848. if (br->multicast_disabled)
  849. return 0;
  850. switch (skb->protocol) {
  851. case htons(ETH_P_IP):
  852. return br_multicast_ipv4_rcv(br, port, skb);
  853. }
  854. return 0;
  855. }
  856. static void br_multicast_query_expired(unsigned long data)
  857. {
  858. struct net_bridge *br = (void *)data;
  859. spin_lock(&br->multicast_lock);
  860. if (br->multicast_startup_queries_sent <
  861. br->multicast_startup_query_count)
  862. br->multicast_startup_queries_sent++;
  863. br_multicast_send_query(br, NULL, br->multicast_startup_queries_sent);
  864. spin_unlock(&br->multicast_lock);
  865. }
  866. void br_multicast_init(struct net_bridge *br)
  867. {
  868. br->hash_elasticity = 4;
  869. br->hash_max = 512;
  870. br->multicast_router = 1;
  871. br->multicast_last_member_count = 2;
  872. br->multicast_startup_query_count = 2;
  873. br->multicast_last_member_interval = HZ;
  874. br->multicast_query_response_interval = 10 * HZ;
  875. br->multicast_startup_query_interval = 125 * HZ / 4;
  876. br->multicast_query_interval = 125 * HZ;
  877. br->multicast_querier_interval = 255 * HZ;
  878. br->multicast_membership_interval = 260 * HZ;
  879. spin_lock_init(&br->multicast_lock);
  880. setup_timer(&br->multicast_router_timer,
  881. br_multicast_local_router_expired, 0);
  882. setup_timer(&br->multicast_querier_timer,
  883. br_multicast_local_router_expired, 0);
  884. setup_timer(&br->multicast_query_timer, br_multicast_query_expired,
  885. (unsigned long)br);
  886. }
  887. void br_multicast_open(struct net_bridge *br)
  888. {
  889. br->multicast_startup_queries_sent = 0;
  890. if (br->multicast_disabled)
  891. return;
  892. mod_timer(&br->multicast_query_timer, jiffies);
  893. }
  894. void br_multicast_stop(struct net_bridge *br)
  895. {
  896. struct net_bridge_mdb_htable *mdb;
  897. struct net_bridge_mdb_entry *mp;
  898. struct hlist_node *p, *n;
  899. u32 ver;
  900. int i;
  901. del_timer_sync(&br->multicast_router_timer);
  902. del_timer_sync(&br->multicast_querier_timer);
  903. del_timer_sync(&br->multicast_query_timer);
  904. spin_lock_bh(&br->multicast_lock);
  905. mdb = br->mdb;
  906. if (!mdb)
  907. goto out;
  908. br->mdb = NULL;
  909. ver = mdb->ver;
  910. for (i = 0; i < mdb->max; i++) {
  911. hlist_for_each_entry_safe(mp, p, n, &mdb->mhash[i],
  912. hlist[ver]) {
  913. del_timer(&mp->timer);
  914. del_timer(&mp->query_timer);
  915. call_rcu_bh(&mp->rcu, br_multicast_free_group);
  916. }
  917. }
  918. if (mdb->old) {
  919. spin_unlock_bh(&br->multicast_lock);
  920. rcu_barrier_bh();
  921. spin_lock_bh(&br->multicast_lock);
  922. WARN_ON(mdb->old);
  923. }
  924. mdb->old = mdb;
  925. call_rcu_bh(&mdb->rcu, br_mdb_free);
  926. out:
  927. spin_unlock_bh(&br->multicast_lock);
  928. }
  929. int br_multicast_set_router(struct net_bridge *br, unsigned long val)
  930. {
  931. int err = -ENOENT;
  932. spin_lock_bh(&br->multicast_lock);
  933. if (!netif_running(br->dev))
  934. goto unlock;
  935. switch (val) {
  936. case 0:
  937. case 2:
  938. del_timer(&br->multicast_router_timer);
  939. /* fall through */
  940. case 1:
  941. br->multicast_router = val;
  942. err = 0;
  943. break;
  944. default:
  945. err = -EINVAL;
  946. break;
  947. }
  948. unlock:
  949. spin_unlock_bh(&br->multicast_lock);
  950. return err;
  951. }
  952. int br_multicast_set_port_router(struct net_bridge_port *p, unsigned long val)
  953. {
  954. struct net_bridge *br = p->br;
  955. int err = -ENOENT;
  956. spin_lock(&br->multicast_lock);
  957. if (!netif_running(br->dev) || p->state == BR_STATE_DISABLED)
  958. goto unlock;
  959. switch (val) {
  960. case 0:
  961. case 1:
  962. case 2:
  963. p->multicast_router = val;
  964. err = 0;
  965. if (val < 2 && !hlist_unhashed(&p->rlist))
  966. hlist_del_init_rcu(&p->rlist);
  967. if (val == 1)
  968. break;
  969. del_timer(&p->multicast_router_timer);
  970. if (val == 0)
  971. break;
  972. br_multicast_add_router(br, p);
  973. break;
  974. default:
  975. err = -EINVAL;
  976. break;
  977. }
  978. unlock:
  979. spin_unlock(&br->multicast_lock);
  980. return err;
  981. }
  982. int br_multicast_toggle(struct net_bridge *br, unsigned long val)
  983. {
  984. struct net_bridge_port *port;
  985. int err = -ENOENT;
  986. spin_lock(&br->multicast_lock);
  987. if (!netif_running(br->dev))
  988. goto unlock;
  989. err = 0;
  990. if (br->multicast_disabled == !val)
  991. goto unlock;
  992. br->multicast_disabled = !val;
  993. if (br->multicast_disabled)
  994. goto unlock;
  995. if (br->mdb) {
  996. if (br->mdb->old) {
  997. err = -EEXIST;
  998. rollback:
  999. br->multicast_disabled = !!val;
  1000. goto unlock;
  1001. }
  1002. err = br_mdb_rehash(&br->mdb, br->mdb->max,
  1003. br->hash_elasticity);
  1004. if (err)
  1005. goto rollback;
  1006. }
  1007. br_multicast_open(br);
  1008. list_for_each_entry(port, &br->port_list, list) {
  1009. if (port->state == BR_STATE_DISABLED ||
  1010. port->state == BR_STATE_BLOCKING)
  1011. continue;
  1012. __br_multicast_enable_port(port);
  1013. }
  1014. unlock:
  1015. spin_unlock(&br->multicast_lock);
  1016. return err;
  1017. }
  1018. int br_multicast_set_hash_max(struct net_bridge *br, unsigned long val)
  1019. {
  1020. int err = -ENOENT;
  1021. u32 old;
  1022. spin_lock(&br->multicast_lock);
  1023. if (!netif_running(br->dev))
  1024. goto unlock;
  1025. err = -EINVAL;
  1026. if (!is_power_of_2(val))
  1027. goto unlock;
  1028. if (br->mdb && val < br->mdb->size)
  1029. goto unlock;
  1030. err = 0;
  1031. old = br->hash_max;
  1032. br->hash_max = val;
  1033. if (br->mdb) {
  1034. if (br->mdb->old) {
  1035. err = -EEXIST;
  1036. rollback:
  1037. br->hash_max = old;
  1038. goto unlock;
  1039. }
  1040. err = br_mdb_rehash(&br->mdb, br->hash_max,
  1041. br->hash_elasticity);
  1042. if (err)
  1043. goto rollback;
  1044. }
  1045. unlock:
  1046. spin_unlock(&br->multicast_lock);
  1047. return err;
  1048. }