Annotation of wikisrc/users/kefren/mpls.mdwn, revision 1.1
1.1 ! wiki 1: #Some quick info about MPLS:
! 2:
! 3: You need to compile your kernel with options MPLS and psuedo-device ifmpls
! 4: For pure LSR - that only switch labels without encap/decap from other protocols (e.g. INET) you need only to work on routing table. For example:
! 5:
! 6: <pre># route add -mpls 41 -tag 25 -inet 193.28.151.97
! 7: add host 41: gateway 193.28.151.97
! 8: # route add -mpls 42 -tag 30 -inet 193.28.151.97
! 9: add host 42: gateway 193.28.151.97
! 10: # route add -mpls 51 -tag 25 -inet 193.28.151.97
! 11: add host 51: gateway 193.28.151.97</pre>
! 12:
! 13: Translation of first line: if it receives an MPLS frame with label 41 forward it to INET next-hop 193.28.151.97, tagged with label 25
! 14:
! 15: You also need to tweak sysctl to accept and forward MPLS:
! 16:
! 17: <pre># sysctl -w net.mpls.accept=1
! 18: net.mpls.accept: 0 -> 1
! 19: # sysctl -w net.mpls.forwarding=1
! 20: net.mpls.forwarding: 0 -> 1</pre>
! 21:
! 22:
! 23: Verify routes with route get or better with netstat -nrT:
! 24:
! 25: <pre>
! 26: ...
! 27: MPLS:
! 28: Destination Gateway Flags Refs Use Mtu Tag Interface
! 29: 41 193.28.151.97 UGHS 0 37241 - 25 sk0
! 30: 42 193.28.151.97 UGHS 0 0 - 30 sk0
! 31: 51 193.28.151.97 UGHS 0 0 - 25 sk0
! 32: </pre>
! 33:
! 34: #Interacting with other protocols
! 35:
! 36: If you want to also decapsulate/encapsulate from MPLS to some other protocol (like INET or INET6), you have to create an mpls interface and put in up: ifconfig mpls0 create up. YOU NEED TO ADD AN ADDRESS OF THAT PROTOCOL ON THIS INTERFACE - whenever that address is private or not.
! 37:
! 38: E.g. for INET - setting a fictitious address:
! 39:
! 40: <pre>
! 41: # ifconfig mpls0 create up
! 42: # ifconfig mpls0 1.1.1.1/32
! 43: </pre>
! 44:
! 45: After that create routes like this - use -ifa flag in order to avoid self-generated packets having source address 1.1.1.1, but route them thru mpls0 interface.
! 46:
! 47: <pre>
! 48: # route add 204.152.190.0/24 -ifa 193.28.151.105 -ifp mpls0 -tag 25 -inet 193.28.151.97
! 49: add net 204.152.190.0: gateway 193.28.151.97
! 50: </pre>
! 51:
! 52: Verify the route:
! 53:
! 54: <pre>
! 55: # route -n get 204.152.190.0/24
! 56: route to: 204.152.190.0
! 57: destination: 204.152.190.0
! 58: mask: 255.255.255.0
! 59: gateway: 193.28.151.97
! 60: Tag: 25
! 61: local addr: 193.28.151.105
! 62: interface: mpls0
! 63: flags: <UP,GATEWAY,DONE,STATIC>
! 64: recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
! 65: 0 0 0 813 344 0 0 0
! 66: sockaddrs: <DST,GATEWAY,NETMASK,IFP,IFA,TAG>
! 67: </pre>
! 68:
! 69: or with netstat -rT:
! 70: <pre>
! 71: ...
! 72: 204.152.190/24 193.28.151.97 UGS 0 95362 - 25 mpls0
! 73: ...
! 74: </pre>
! 75:
! 76:
! 77: I'm working on [[LDP]] daemon, it should be available in src tree in a couple of months. You may still want to test the beta.
CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb