The MPLS over ATM implementation has some additional requirements beyond MPLS over ethernet. For MPLS over ATM to work in the Linx kernel you will need the following kernel options compiled in: Code maturity level options ---> [*] Prompt for development and/or incomplete code/drivers Networking options ---> [*] Kernel/User netlink socket [*] Routing message [*] TCP/IP networking [*] IP: multicasting [*] Asynchronous Transfer Mode (ATM) (EXPERIMENTAL) [*] Classical IP over ATM [*] Multi Protocol Label Switching - MPLS Network device support ---> ATM drivers ---> <*> ATM over TCP (or any of the other ATM drivers) After the kernel has been compiled, and rebooted to be running with these options, you will need to setup a CLIP interface with the same index as the physical ATM index of the device. For example I prepare my ATM over TCP setup this way: atmtcp virtual 1 listen bg atmarpd -b atmarp -c atm1 ifconfig atm1 192.168.1.1 netmask 255.255.255.0 The assosiation between the CLIP interface and the physical ATM card is made because the CLIP device ends in 1 and the physical ATM card index is 1. At this point you can then create an MPLS outlabel like this: mplsadm -A -O atm:0/33:atm1 (note you do not need to put the L3 nexthop info) To create an MPLS inlabel yout MUST have a labelspace assigned before trying to setup the inlabel: mplsadm -L atm1:3 mplsadm -A -I atm:0/33:3