[Xorp-users] xorp with click and RIP
Pavlin Radoslavov
pavlin at icir.org
Tue Dec 11 15:38:59 PST 2007
If the problem is what I think it is, this might require some time
to investigate it, so probably I won't be able to look into the
details of the problem until next week or so.
In the mean time I have few questions:
* Can you confirm that route 224.0.0.0/4 was actually added to the
kernel. I don't remember whether adding such multicast routes will
actually work, but if it didn't work then you should add it by
hand before starting XORP.
* Is the error you are seeing same as before:
"Cannot find outgoing port number"
* What happens if you use unicast static routes (only) instead of
RIP. Do you see same "Cannot find outgoing port number" error?
Thanks,
Pavlin
Robert Joseph Suk <rsuk at ucsc.edu> wrote:
> I upgraded to the CVS versions of both xorp(1.52) and
> click(1.6.0) and it solved the problem of using the click
> forwarding path. My hardware is set up as follows:
>
> PC2--PC3--PC4
>
> PC2: xl0: 10.0.1.22, xl1: 10.0.2.22
> PC3: xl0: 10.0.2.33, xl1: 10.0.3.33
> PC4: xl0: 10.0.3.44, xl1: 10.0.4.44
>
> The click forwarding path works fine, and RIP runs just
> fine in userspace, but XORP routes are not being added to
> click.
>
> Below is my xorp config:
> PC3# cat xorpclick_pc3.boot
> interfaces{
> restore-original-config-on-shutdown: false
> interface xl0 {
> description: "from 10.0.2"
> disable: false
> vif xl0 {
> disable: false
> address 10.0.2.33 {
> prefix-length: 24
> broadcast: 10.0.2.255
> disable: false
> }
> }
> }
> interface xl1 {
> description: "to 10.0.3"
> disable: false
> vif xl1 {
> disable: false
> address 10.0.3.33 {
> prefix-length: 24
> broadcast: 10.0.3.255
> disable: false
> }
> }
> }
> } /* </interfaces> */
>
> fea{
> unicast-forwarding4 {
> disable: false
> }
> unicast-forwarding6 {
> disable: true
> }
>
> click {
> disable: false
> duplicate-routes-to-kernel: true
>
> kernel-click{
> disable: true
> }
> user-click{
> disable: false
> command-file:
> "/usr/local/bin/click"
> command-extra-arguments: "-R"
> command-execute-on-startup: true
> startup-config-file:
> "/usr/local/xorp/iprouter_auto.click"
> user-click-config-generator-file:
> "/usr/local/fea/xorp_fea_click_config_generator"
> }
> }
> } /* </fea> */
> policy {
> /*Describe connected routes for redistribution*/
> policy-statement connected {
> term export {
> from {
> protocol: "connected"
> }
> }
> }
> }
>
> protocols {
> static{
> route 224.0.0.0/4{
> next-hop: 10.0.2.22
> metric: 1
> }
> }
> rip {
> export: "connected"
>
> /*run on both interfaces*/
> interface xl0 {
> vif xl0 {
> address 10.0.2.33 {
> disable: false
> }
> }
> }
> interface xl1 {
> vif xl1 {
> address 10.0.3.33 {
> disable: false
> }
> }
> }
> } /* </rip> */
> } /* </protocols>*/
>
>
>
> And here is my click_config_generator:
> *note, this is the same click config as
> iprouter_auto.click in my xorp config.
>
>
> PC3# cat xorp_fea_click_config_generator
> printf("
> // Generated by make-ip-conf.pl
> // xl0 10.0.2.33 00:01:02:42:20:EC
> // xl1 10.0.3.33 00:01:02:3E:4E:3A
>
> // Shared IP input path and routing table
> ip :: Strip(14)
> -> good_header :: CheckIPHeader(INTERFACES
> 10.0.2.33/255.255.255.0 10.0.3.33/255.255.255.0)
> good_header[0] -> _xorp_rt4 :: LinearIPLookup(
> 10.0.2.33/32 2,
> 10.0.2.255/32 2,
> 10.0.2.0/32 2,
> 10.0.3.33/32 2,
> 10.0.3.255/32 2,
> 10.0.3.0/32 2, //above are local interfaces.
> deliver locally
> 10.0.2.0/255.255.255.0 0, //xl0
> 10.0.3.0/255.255.255.0 1, //xl1
> 255.255.255.255/32 0.0.0.0 2, //broadcasts are
> local and get dropped
> 0.0.0.0/32 2,
> 0.0.0.0/0.0.0.0 10.0.2.22 0);
>
> // ARP responses are copied to each ARPQuerier and the
> host.
> arpt :: Tee(3);
>
> // Input and output paths for xl0
> c0 :: Classifier(12/0806 20/0001, 12/0806 20/0002,
> 12/0800, -);
> FromDevice(xl0) -> c0;
> out0 :: Queue(200) -> todevice0 :: ToDevice(xl0);
> c0[0] -> ar0 :: ARPResponder(10.0.2.33 00:01:02:42:20:EC)
> -> out0;
> arpq0 :: ARPQuerier(10.0.2.33, 00:01:02:42:20:EC) ->
> newOUT::Tee(2);
> newOUT[0]->out0;
> c0[1] -> arpt;
> arpt[0] -> [1]arpq0;
> c0[2] -> Paint(1) -> ip;
> c0[3] -> Print("xl0 non-IP") -> Discard;
>
> // Input and output paths for xl1
> c1 :: Classifier(12/0806 20/0001, 12/0806 20/0002,
> 12/0800, -);
> FromDevice(xl1) -> c1;
> out1 :: Queue(200) -> todevice1 :: ToDevice(xl1);
> c1[0] -> ar1 :: ARPResponder(10.0.3.33 00:01:02:3E:4E:3A)
> -> out1;
> arpq1 :: ARPQuerier(10.0.3.33, 00:01:02:3E:4E:3A) -> out1;
> newOUT[1]->out1;
> c1[1] -> arpt;
> arpt[1] -> [1]arpq1;
> c1[2] -> Paint(2) -> ip;
> c1[3] -> Print("xl1 non-IP") -> Discard;
>
> // Local delivery
> toh :: Print(toh) -> Discard;
> arpt[2] -> toh;
> _xorp_rt4[2] -> IPReassembler -> ping_ipc ::
> IPClassifier(icmp type echo, -);
> ping_ipc[0] -> ICMPPingResponder -> [0]_xorp_rt4;
> ping_ipc[1] -> EtherEncap(0x0800, 1:1:1:1:1:1,
> 2:2:2:2:2:2) -> toh;
>
> // Forwarding path for xl0
> _xorp_rt4[0] -> DropBroadcasts
> -> cp0 :: PaintTee(1)
> -> gio0 :: IPGWOptions(10.0.2.33)
> -> FixIPSrc(10.0.2.33)
> -> dt0 :: DecIPTTL
> -> fr0 :: IPFragmenter(1500)
> -> [0]arpq0;
> dt0[1] -> ICMPError(10.0.2.33, timeexceeded) -> _xorp_rt4;
> fr0[1] -> ICMPError(10.0.2.33, unreachable, needfrag) ->
> _xorp_rt4;
> gio0[1] -> ICMPError(10.0.2.33, parameterproblem) ->
> _xorp_rt4;
> cp0[1] -> ICMPError(10.0.2.33, redirect, host) ->
> _xorp_rt4;
>
> // Forwarding path for xl1
> _xorp_rt4[1] -> DropBroadcasts
> -> cp1 :: PaintTee(2)
> -> gio1 :: IPGWOptions(10.0.3.33)
> -> FixIPSrc(10.0.3.33)
> -> dt1 :: DecIPTTL
> -> fr1 :: IPFragmenter(1500)
> -> [0]arpq1;
> dt1[1] -> ICMPError(10.0.3.33, timeexceeded) -> _xorp_rt4;
> fr1[1] -> ICMPError(10.0.3.33, unreachable, needfrag) ->
> _xorp_rt4;
> gio1[1] -> ICMPError(10.0.3.33, parameterproblem) ->
> _xorp_rt4;
> cp1[1] -> ICMPError(10.0.3.33, redirect, host) ->
> _xorp_rt4;
> ");
>
>
>
> On Thu, 06 Dec 2007 18:01:55 -0800
> Pavlin Radoslavov <pavlin at icir.org> wrote:
> > Robert Joseph Suk <rsuk at ucsc.edu> wrote:
> >
> >> Thanks for your reply, Pavlin.
> >> I'm not exactly sure the best way to get the
> >> xorp_fea_click_config_generator to unconditionally
> >>return
> >> my static config, but I replaced the config_generator
> >> script with my config file, inside a printf("") and it
> >> seems to work. I also made sure to rename my
> >> LinearIPlookup from "rt" to "_xorp_rt4" so xorp could
> >> handle it. The router still receives updates from
> >
> > Yes, this hack should do it.
> >
> >> neighboring routers and updates the RIB, but now xorp
> >> throws an error:
> >>
> >> [ 2007/12/06 17:28:07 ERROR xorp_fea:1612 FEA +71
> >> fti_transaction.cc operation_result ] FTI transaction
> >> commit failed on AddE
> >> ntry4: net = 10.0.0.0/24 nexthop = 10.0.2.22 ifname =
> >>xl0
> >> vifname = xl0 metric = 2 admin_distance = 120 xorp_route
> >>=
> >> true is_d
> >> eleted = false is_unresolved = false is_connected_route
> >>=
> >> false
> >> [ 2007/12/06 17:28:07 ERROR xorp_fea:1612 FEA +301
> >> fticonfig_entry_set_click.cc add_entry ] Cannot find
> >> outgoing port number
> >> for the Click forwarding table element to add entry net
> >>=
> >> 10.0.1.0/24 nexthop = 10.0.2.22 ifname = xl0 vifname =
> >>xl0
> >> metric =
> >> 1 admin_distance = 120 xorp_route = true is_deleted =
> >> false is_unresolved = false is_connected_route = false
> >
> > There seems to be some error with adding the routes to
> >Click.
> > Could you update to the latest XORP from CVS.
> > The update might not fix the problem, but will make it
> >easier to
> > debug it:
> >
> > http://www.xorp.org/cvs.html
> >
> > Please send me your latest XORP configuration as well as
> >your
> > hacked xorp_fea_click_config_generator.
> > Also, please tell me the Click version you are using.
> >
> > Thanks,
> > Pavlin
> >
> >>
> >> and click still won't function.
> >> When I run "click myconfig.click", pings across the
> >>router
> >> work fine, while pinging the router directly generates
> >> Duplicate replies (one from the kernel, and one from
> >> click).
> >> As a debug, in my click config I added a Tee to the
> >>output
> >> of xl0 and copied all click-generated responses out to
> >>The
> >> other interface, xl1. Now when I ping the router, I can
> >> see the extra traffic on a TCPdump of xl1. When I run
> >> xorp with my config and ping the router, I only get one
> >> response, and nothing on xl1, leading me to believe that
> >> either my click config isn't running, or it just isnt
> >> getting any traffic.
> >>
> >>
> >> On Thu, 06 Dec 2007 12:39:47 -0800
> >> Pavlin Radoslavov <pavlin at icir.org> wrote:
> >> >> I'm trying to set up a xorp/click configuration
> >>which
> >> >> runs RIP. I have RIP working with xorp, but when I
> >> >>enable
> >> >> the user click forwarding path, I get strange
> >>behavior.
> >> >>If
> >> >> I 'duplicate-routes-to-kernel' everything works fine.
> >> >> However, when I don't duplicate routes-to-kernel, the
> >> >> routes still show up in xorpsh (show route table ipv4
> >> >> unicast rip/final), but if I ping any of those
> >> >>addresses,
> >> >> I get 'no route to host'. Xorp also cannot send RIP
> >> >> updates, getting the send_from_multicast_if failed.
> >> >
> >> >First the (hopefully) easy part:
> >> > As you know already, FreeBSD requires to have a
> >>matching
> >> >route
> >> > (e.g., 0.0.0.0/0) in the unicast forwarding table in
> >>the
> >> >kernel to
> >> > be able to originate multicast packets. If you use
> >>XORP
> >> >to configure
> >> > the 0.0.0.0/0 static route, and if
> >> >"duplicate-routes-to-kernel" is
> >> > disabled, this route won't reach the kernel.
> >> > Hence, to get around this problem you should add
> >> >0.0.0.0/0 to the
> >> > kernel by hand before starting XORP.
> >> >
> >> >> The reason I want to turn
> >>'duplicate-routes-to-kernel'
> >> >> off, is so that I can check that the click forwarding
> >> >>path
> >> >> is working.
> >> >>
> >> >> I already added a static route 0.0.0.0/0 to an
> >>attached
> >> >> interface, and put "multicast_host="YES"" in my
> >>rc.conf.
> >> >> I'm running BSD6.2, and my xorp config is below. The
> >> >>click
> >> >> config I'm running is simply the one generated by
> >> >> 'make-ip-conf.pl' which is a basic IP router
> >> >> Any ideas why xorp sees the routes in xorpsh but
> >>can't
> >> >>use
> >> >> them?
> >> >
> >> > If you are to use your own static config with
> >> >make-ip-conf.pl, it
> >> > will be safer if you also modify the sample
> >> > "/usr/local/fea/xorp_fea_click_config_generator"
> >> >generator to
> >> > unconditionally return that configuration. FYI, the
> >> >config generator
> >> > is automatically called by XORP whenenever something
> >>in
> >> >the
> >> > interface configuration changes, so on startup it
> >>might
> >> >actually be
> >> > overwriting your own static config.
> >> >
> >> > Once you eliminate the config generation factor, then
> >> >you need to
> >> > investigate whether userland Click itself is working
> >>as
> >> > expected. For that purpose I'd recommend to start
> >> >userland Click by
> >> > hand (without XORP), and then manually configure it
> >>with
> >> >your static
> >> > config (including the routes that should be generated
> >>by
> >> >RIP).
> >> > Then do the ping test to see whether userland Click on
> >> >its own is
> >> > fine.
> >> > One thing to have in mind is that the ping packets
> >> >originated on the
> >> > router running Click might not actually be processed
> >>by
> >> >Click: such
> >> > packets will lookup the unicast forwarding table in
> >>the
> >> >kernel, and
> >> > therefore fail. Hence, you might want to run ping on a
> >> >machine
> >> > directly connected to the router running Click.
> >> >
> >> > Hopefully the above tests will narrow the problem.
> >> >
> >> > Regards,
> >> > Pavlin
> >> >
> >> > P.S. In your config you don't need the plumbing/mfea4
> >> >and mfea6
> >> > sections.
> >> >
> >> >
> >> >>
> >> >> interfaces{
> >> >> restore-original-config-on-shutdown: false
> >> >> interface xl0 {
> >> >> description: "from 10.0.2"
> >> >> disable: false
> >> >> vif xl0 {
> >> >> disable: false
> >> >> address 10.0.2.33 {
> >> >> prefix-length: 24
> >> >> broadcast:
> >>10.0.2.255
> >> >> disable: false
> >> >> }
> >> >> }
> >> >> }
> >> >> interface xl1 {
> >> >> description: "to 10.0.3"
> >> >> disable: false
> >> >> vif xl1 {
> >> >> disable: false
> >> >> address 10.0.3.33 {
> >> >> prefix-length: 24
> >> >> broadcast:
> >>10.0.3.255
> >> >> disable: false
> >> >> }
> >> >> }
> >> >> }
> >> >> } /* </interfaces> */
> >> >>
> >> >> fea{
> >> >> unicast-forwarding4 {
> >> >> disable: true
> >> >> }
> >> >>
> >> >> unicast-forwarding6 {
> >> >> disable: true
> >> >> }
> >> >>
> >> >> click {
> >> >> disable: false /*run autogenerated
> >> >> config from /conf/make-ip-conf.pl*/
> >> >> duplicate-routes-to-kernel: true
> >> >>
> >> >> kernel-click{
> >> >> disable: true
> >> >> }
> >> >>
> >> >> user-click{
> >> >> disable: false
> >> >> command-file:
> >> >> "/usr/local/bin/click"
> >> >> command-extra-arguments:
> >>"-R"
> >> >> command-execute-on-startup:
> >> >>true
> >> >> startup-config-file:
> >> >> "/usr/local/xorp/iprouter_auto.click"
> >> >>
> >> user-click-config-generator-file:
> >> >> "/usr/local/fea/xorp_fea_click_config_generator"
> >> >> }
> >> >> }
> >> >> } /* </fea> */
> >> >> plumbing{
> >> >> mfea4 {
> >> >> disable: true
> >> >> }
> >> >> mfea6{
> >> >> disable: true
> >> >> }
> >> >> }
> >> >> policy {
> >> >> /*Describe connected routes for
> >> >>redistribution*/
> >> >> policy-statement connected {
> >> >> term export {
> >> >> from {
> >> >> protocol:
> >>"connected"
> >> >> }
> >> >> }
> >> >> }
> >> >> }
> >> >>
> >> >> protocols {
> >> >> static{
> >> >> route 0.0.0.0/0{
> >> >> next-hop: 10.0.2.22
> >> >> metric: 1
> >> >> }
> >> >> }
> >> >> rip {
> >> >> export: "connected"
> >> >>
> >> >> /*run on both interfaces*/
> >> >> interface xl0 {
> >> >> vif xl0 {
> >> >> address 10.0.2.33 {
> >> >> disable:
> >>false
> >> >> }
> >> >> }
> >> >> }
> >> >> interface xl1 {
> >> >> vif xl1 {
> >> >> address 10.0.3.33 {
> >> >> disable:
> >>false
> >> >> }
> >> >> }
> >> >> }
> >> >> } /* </rip> */
> >> >> } /* </protocols>*/
> >> >>
> >> >>
> >> >>
> >> >> -Robbie
> >> >>
> >> >> _______________________________________________
> >> >> Xorp-users mailing list
> >> >> Xorp-users at xorp.org
> >> >>
> >>http://mailman.ICSI.Berkeley.EDU/mailman/listinfo/xorp-users
> >>
> >> -Robbie
> >>
> >> _______________________________________________
> >> Xorp-users mailing list
> >> Xorp-users at xorp.org
> >> http://mailman.ICSI.Berkeley.EDU/mailman/listinfo/xorp-users
>
> -Robbie
>
> _______________________________________________
> Xorp-users mailing list
> Xorp-users at xorp.org
> http://mailman.ICSI.Berkeley.EDU/mailman/listinfo/xorp-users
More information about the Xorp-users
mailing list