Hash: SHA1
Thank you very much!!!
- --
Gustavo Martín Morcuende
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Use GnuPG with Firefox : http://getfiregpg.org (Version: 0.7.8)
iEYEARECAAYFAkqN3AsACgkQ/bktI8Hg05DUDQCgm72GWMXgMc0rCSGtq2Fk24qo
H4EAnA4Vm4kpB86HMj1Kz476WiD1LiHQ
=L76l
-----END PGP SIGNATURE-----
2009/8/20 Stephen Hemminger <shemminger@xxxxxxxxxxxxxxxxxxxx>
net/bridge/br_stp_*.cOn Thu, 20 Aug 2009 03:56:16 +0200
Gustavo Martin <gu.martinm@xxxxxxxxx> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Hello,
>
> First, sorry for my english. I have to get better it.
> I am trying to develop a new protocol for the linux kernel 2.6.26
> similar to RSTP by my free time. Because of it I am searching the bridging
> code. I began from the function netif_receive_skb (I don't need to know
> anything about the hardware or the interruptions) looking for the first
> functions connected with the spanning tree protocol implementation.
> I found this:
>
> 1- The function netif_receive_skb calls to: skb = handle_bridge(skb,
> &pt_prev, &ret, orig_dev)
> 2- In handle_bridge(skb, &pt_prev, &ret, orig_dev) I found: return
> br_handle_frame_hook(port, skb)
> 3- In br_handle_frame I found: if (NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb,
> skb->dev, NULL, br_handle_local_finish))
> 4- In br_handle_local_finish I didn't find anything.
>
> I have been reading the book "Understanding Linux Network Internals
> (2005)" but this book (I think) is for the kernel 2.6.16. In this book the
> author speaks about the function br_stp_handle_bpdu. With the kernel 2.6.26
> in spite of that function you can find br_handle_local_finish.
>
> I continued searching in netif_receive_skb. In this function after the
> call to handle_bridge I found this code:
>
> 2016 skb = handle_bridge(skb, &pt_prev, &ret, orig_dev);
> 2107 if (!skb)
> 2108 goto out;
> 2109 skb = handle_macvlan(skb, &pt_prev, &ret, orig_dev);
> 2110 if (!skb)
> 2111 goto out;
> 2112
> 2113 type = skb->protocol;
> 2114 list_for_each_entry_rcu(ptype,
> 2115 &ptype_base[ntohs(type) &
> PTYPE_HASH_MASK], list) {
> 2116 if (ptype->type == type &&
> 2117 (!ptype->dev || ptype->dev == skb->dev)) {
> 2118 if (pt_prev)
> 2119 ret = deliver_skb(skb, pt_prev,
> orig_dev);
> 2120 pt_prev = ptype;
> 2121 }
> 2122 }
> 2123
> 2124 if (pt_prev) {
> 2125 ret = pt_prev->func(skb, skb->dev, pt_prev, orig_dev);
> 2126 } else {
> 2127 kfree_skb(skb);
> 2128 /* Jamal, now you will not able to escape explaining
> 2129 * me how you were going to use this. :-)
> 2130 */
> 2131 ret = NET_RX_DROP;
> 2132 }
>
>
> My question (probably stupid question, sorry but this is my first time
> with the linux kernel) is: Where connect the SPANING TREE PROTOCOL
> functions with the bridging code?
You might be better off looking at the RSTP code in user space.
See:
http://git.kernel.org/?p=linux/kernel/git/shemminger/rstp.git;a=summary
To get:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/shemminger/rstp.git
_______________________________________________ Bridge mailing list Bridge@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/bridge