[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