Juniper ACX2100

This is an Access Router that can carry up to 16x E1/T1 lines over SAToP/MPLS/Ethernet

Pseudowire formats

The ACX2100 supports the following formats:
  1. SAToP (structure agnostic TDM over packet)
  2. Cisco-HDLC compatible framing
  3. PPP
  4. Inverse ATM Multiplex (used in classic 3G NodeB with Iub over ATM)


In this format, the pseudowire format consists of 256 bytes unaligned E1 bitstream sent every 1ms.

Layer stacking is:
  • 14-byte Ethernet II, ethtype MPLS (0x8847)
  • 4-byte MPLS header containing the label
  • 4-byte Pseudowire Ethernet Control Word containing sequence number
  • 256-byte E1 payload

See juniper-acx2100-satop-static-mpls.pcap

Interfacing this from Linux

In case anyone wants to interface with this from FOSS, it should be relatively easy to adapt DAHDI for it, by using dahdi-linux/drivers/dahdi/dahdi_dynamic_eth.c as a reference. This driver, too, implements E1 payload over Ethernet frames.

Configuration related to E1/T1 pseudowires

The ACX2100 supports so-called pseudowires which is the option of encapsulating/transporting E1/T1 circuits via Ethernet. Contrary to other equipment, the ACX seems to be constrained to transport over MPLS only.

Normal usage with OSPF, LDP and RSVP

First, the ACX establishes dynamic routing to its peers via OSPF. You can interface this to a Linux machine running FRR ospfd.

Second, the ACX establishes LDP. You can interface this to a Linux machine running FRR ldpd.

Third, the ACX uses RSVP to configure the lables used for the individual pseudowires. There is currently no known Linux implementation that understands the specific RSVP use case for E1 pseudowires.

Configuration on ACX side

chassis {
    fpc 0 {
        pic 0 {
            framing e1;
interfaces {
    ce1-0/0/0 {
        no-partition interface-type e1;
    e1-0/0/0 {
        encapsulation satop;
        unit 0;
    ge-1/0/0 {
        unit 0 {
            family inet {
            family mpls;
protocols {
    rsvp {
        traceoptions {
            file rsvp-log;
            flag all;
        interface ge-1/0/0.0;
    mpls {
        label-switched-path PE1-to-PE2 {
        interface ge-1/0/0.0;
    ospf {
        area {
            interface ge-1/0/0.0;
    ldp {
        traceoptions {
            file ldp-log;
            flag all;
        interface ge-1/0/0.0;
    l2circuit {
        neighbor {
            interface e1-0/0/0.0 {
                virtual-circuit-id 1;

static pseudowires

Much less documented/publicized, one can also simply crate a "static" label configuration for a given l2circuit:


protocols { 
    l2circuit {
        neighbor {
            interface e1-0/0/0.0 {
                static {
                    incoming-label 1000023;
                    outgoing-label 23;
                virtual-circuit-id 1;

In this configuration the E1 interface 0/0/0 is associated with the incoming label 1000023 and outgoing label 23. You can send and receive the pseudowire payload using the above-mentioned mpls labels. The Ethernet destination address is the one associated with the neighboring router

boot log

ELF file is 32 bit
Loading .text @ 0x00010060 (194856 bytes)
Loading .rodata @ 0x0003f988 (13601 bytes)
Loading .rodata.str1.4 @ 0x00042eac (16496 bytes)
Loading set_Xcommand_set @ 0x00046f1c (92 bytes)
Loading .rodata.cst4 @ 0x00046f78 (36 bytes)
Loading .data @ 0x00047000 (13544 bytes)
Loading @ 0x0004a4e8 (120 bytes)
Loading .data.rel @ 0x0004a560 (320 bytes)
Loading @ 0x0004a6a0 (288 bytes)
Loading .data.rel.local @ 0x0004a7c0 (68 bytes)
Loading .got2 @ 0x0004a804 (4172 bytes)
Loading .fixup @ 0x0004b850 (584 bytes)
Loading .sdata @ 0x0004ba98 (80 bytes)
Clearing .sbss @ 0x0004bae8 (128 bytes)
Clearing .bss @ 0x0004bb68 (9440 bytes)
## Starting application at 0x00010060 ...
Consoles: U-Boot console  
Will try to boot from

FreeBSD/PowerPC U-Boot bootstrap loader, Revision 2.4
(, Tue Dec  3 12:09:59 IST 2013)
Memory: 1536MB
Trying to boot from nand-flash0
Loading /boot/defaults/loader.conf 
/kernel data=0x9c9e24+0xa9f6c syms=[0x4+0x89470+0x4+0xc865f]

Hit [Enter] to boot immediately, or space bar for command prompt.
Booting [/kernel]...               
Kernel entry at 0xa00000c0 ...
GDB: debug ports: uart
GDB: current port: uart
KDB: debugger backends: ddb gdb
KDB: current backend: ddb
platform_early_bootinit: MX-PPC Series Early Boot Initialization
mxppc_set_re_type: hw.board.type is ACX-2100
WDOG initialized
Copyright (c) 1996-2014, Juniper Networks, Inc.
All rights reserved.
Copyright (c) 1992-2006 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
        The Regents of the University of California. All rights reserved.
JUNOS 12.3X54-D15.3 #0: 2014-11-29 23:21:25 UTC
WARNING: debug.mpsafenet forced to 0 as ipsec requires Giant
Timecounter "decrementer" frequency 62500000 Hz quality 0
cpu0: Freescale e500v2 core revision 5.1
cpu0: HID0 80004000<EMCP,TBEN>
real memory  = 1585446912 (1512 MB)
avail memory = 1553989632 (1482 MB)
Security policy loaded: JUNOS MAC/runasnonroot (mac_runasnonroot)
Security policy loaded: Junos MAC/veriexec (mac_veriexec)
Security policy loaded: JUNOS MAC/pcap (mac_pcap)
MAC/veriexec fingerprint module loaded: SHA1
MAC/veriexec fingerprint module loaded: SHA256
Initializing M/T platform properties ..
nexus0: <PPC e500 Nexus device>
ocpbus0: <on-chip peripheral bus> on nexus0
openpic0: <OpenPIC in on-chip peripheral bus> iomem 0xf7f40000-0xf7f600b3 on ocpbus0
uart0: <16550 or compatible> iomem 0xf7f04500-0xf7f0450f irq 58 on ocpbus0
uart0: console (9600,n,8,1)
uart1: <16550 or compatible> iomem 0xf7f04600-0xf7f0460f irq 58 on ocpbus0
lbc0: <Freescale 8533 Local Bus Controller> iomem 0xf7f05000-0xf7f05fff,0xf8000000-0xffffffff irq 17,16 on ocpbus0
cfi0: <AMD/Fujitsu - 8MB> iomem 0xffc00000-0xffffffff on lbc0
fsyspld0 iomem 0xfef00000-0xfef00fff on lbc0
ramdev0 iomem 0xfee1f000-0xfee1ffff on lbc0
i2c0: <MPC85XX OnChip i2c Controller> iomem 0xf7f03000-0xf7f03014 irq 59 on ocpbus0
8564 rtc0: <8564 RTC> on i2c0
USB2513i usb hub0: <USB2513Bi usb hub> on i2c0
tsec0: <eTSEC ethernet controller> iomem 0xf7f24000-0xf7f24fff irq 45,46,50 on ocpbus0
tsec0: hardware MAC address 40:a6:77:13:89:7f
miibus0: <MII bus> on tsec0
brgphy0: <BCM54610 10/100/1000baseTX PHY> on miibus0
brgphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto
tsec1: <eTSEC ethernet controller> iomem 0xf7f25000-0xf7f25fff irq 51,52,56 on ocpbus0
tsec1: hardware MAC address 02:00:00:00:00:04
miibus1: <MII bus> on tsec1
gentbi0: <Generic ten-bit interface> on miibus1
gentbi0:  1000baseSX-FDX, 1000baseT-FDX, auto
ehci0: <Frescale Integrated USB 2.0 controller> iomem 0xf7f22000-0xf7f22503 irq 44 on ocpbus0
usb0: EHCI version 1.0
usb0 on ehci0
usb0: USB revision 2.0
uhub0: Freescale EHCI root hub, class 9/0, rev 2.00/1.00, addr 1
uhub0: 1 port with 1 removable, self powered
uhub1: SMSC USB2513Bi, class 9/0, rev 2.00/b.a0, addr 2
uhub1: multiple transaction translators
uhub1: 3 ports with 3 removable, self powered
umass0: vendor 0x13fe USB DISK 2.0, rev 2.00/1.00, addr 3
umass0: SCSI over Bulk-Only; quirks = 0x0000
umass0:0:0:-1: Attached to scbus0
Initializing product: 140 ..
Setting up M/T interface operations and attributes
platform_cookie_read not implemented
###PCB Group initialized for udppcbgroup
###PCB Group initialized for tcppcbgroup
da0 at umass-sim0 bus 0 target 0 lun 0
da0: < USB DISK 2.0 PMAP> Removable Direct Access SCSI-0 device 
da0: 40.000MB/s transfers
da0: 7640MB (15646720 512 byte sectors: 255H 63S/T 973C)
Kernel thread "wkupdaemon" (pid 45) exited prematurely.
Trying to mount root from ufs:/dev/da0s2a
Invalid time in real time clock.
Check and reset the date immediately!
Process-1 beginning MFSROOT initialization...
Creating MFSROOT...
/dev/md0: 25.0MB (51196 sectors) block size 16384, fragment size 2048
        using 4 cylinder groups of 6.25MB, 400 blks, 896 inodes.
super-block backups (for fsck -b #) at:
 32, 12832, 25632, 38432
Populating MFSROOT...
Setting up mounts...
Changing Root to MFSROOT...
Continuing boot from MFSROOT...
Attaching /packages/jbase via /dev/mdctl...
Mounted jbase package on /dev/md1...
Verified manifest signed by PackageProduction_12_3_0
Verified jboot signed by PackageProduction_12_3_0
Verified jbase-ppc-12.3X54-D15.3 signed by PackageProduction_12_3_0
Setting up ACX specific options
Mounted jkernel package on /dev/md2...
Verified manifest signed by PackageProduction_12_3_0
Verified jkernel-ppc-12.3X54-D15.3 signed by PackageProduction_12_3_0
Mounted jpfe package on /dev/md3...
Mounted jdocs package on /dev/md4...
Verified manifest signed by PackageProduction_12_3_0
Verified jdocs-12.3X54-D15.3 signed by PackageProduction_12_3_0
Mounted jroute package on /dev/md5...
Verified manifest signed by PackageProduction_12_3_0
Verified jroute-ppc-12.3X54-D15.3 signed by PackageProduction_12_3_0
Mounted jcrypto package on /dev/md6...
Verified manifest signed by PackageProduction_12_3_0
Verified jcrypto-ppc-12.3X54-D15.3 signed by PackageProduction_12_3_0
swapon: adding /dev/da0s4WARNING: /var was not properly dismounted
b as swap device
Checking file systems status for recovery action...
/var and /var/log bsdlabel found
Checking sanity of /var [ /dev/da0s3f ] ... done (full)
Checking sanity of /var/log [ /dev/da0s3d ] ... done (full)
Checking sanity of /config [ /dev/da0s2e ] ... done (full)
** /dev/da0s1a
clean, 368832 free (40 frags, 46099 blocks, 0.0% fragmentation)
** /dev/da0s1e
clean, 47221 free (21 frags, 5900 blocks, 0.0% fragmentation)
kern.init_chroot_path:  -> /mfsmnt
Automatic reboot in progress...
Executing tunefs on /...
Enable softupdates for /...
tunefs: soft updates cannot be enabled until fsck is run
tunefs: /dev/md0: failed to write superblock
Enable softupdates for config...
tunefs: soft updates remains unchanged as enabled
Will be using platform specific rc.mount-var to mount var
*** No fsck will be done by us...
Enable softupdates for var...
tunefs: soft updates remains unchanged as enabled
tunefs: soft updates remains unchanged as enabled
Mounting var...
Mounting var/log...
Creating initial configuration...mgd: warning: could not open /config/juniper.conf.md5: No such file or directory
Setting up ACX specific options
mgd: commit complete
Setting initial options:  debugger_on_panic=NO debugger_on_break=NO.
Starting optional daemons: .
Doing initial network setup:
Initial interface configuration:
additional daemons:.
checking for core dump...
savecore: Reboot reason(s): 0x1: power cycle/failure 
No dump exists
Setting up ACX specific options
Additional routing options:kern.module_path: /boot//kernel;/boot/modules -> /modules/peertype;/modules/ifpfLoading the IMA Link Media Layer; Attaching to media services layer
Loading the IMA Group Media Layer; Attaching to media services layer
e_drv;/modules/ifpfe_media;/modules/platform;/moLoading the SONET Media Layer; Attaching to media services layer
kld netpfe media: ifpfem_ds0 ifpfem_ds1e1 ifpfem_ds3e3 iLoading the CHMIC module
fpfem_ima ifpfem_otn ifpfem_sonetkld netpfe drv: ifpfed_atm ifpfed_chmic ifpfed_controller ifpfed_ds0 ifpfed_ds1e1 ifpfed_ds3e3 ifpfed_eth ifpfed_irb ifpfed_lt ifpfed_ml_cmn ifpfed_ml_ha ifpfed_posLoading POS driver
 ifpfed_pppoe ifpfed_sa Loading Aggregate sonet driver
 ifpfed_svcs ifpfed_vtkld platform: mt_ifpfeLoading Multilink Services PICs module.
Loading the M&T Platform NETPFE module
kld peertype: peertype_xdpc ipsec kld.
Doing additional network setup:.
Starting final network daemons:.
Run ACX dual root init to setup sysctls and other stuff...
Boot media /dev/da0 has dual root support
WARNING: JUNOS versions running on dual partitions are not same
** /dev/da0s1a
clean, 368832 free (40 frags, 46099 blocks, 0.0% fragmentation)
setting ldconfig path: /usr/lib /opt/lib
starting standard daemons: cron.
Initial rc.powerpc initialization:.

 Lock Manager
RDM Embedded 7 [04-Aug-2006]
Copyright (c) 1992-2006 Birdstep Technology, Inc.  All Rights Reserved.

Unix Domain sockets Lock manager
Lock manager 'lockmgr' started successfully.

Database Initialization Utility
RDM Embedded 7 [04-Aug-2006]
Copyright (c) 1992-2006 Birdstep Technology, Inc.  All Rights Reserved.

/var/pdb/profile_db initialized

Profile database initialized
Local package initialization:.
kern.securelevel: -1 -> 1
starting local daemons:.
Fri Jan  1 00:04:38 UTC 2010
platform_cookie_read not implemented

Amnesiac (ttyu0)

Files (1)
juniper-acx2100-satop-static-mpls.pcap juniper-acx2100-satop-static-mpls.pcap 4.33 KB packet showing MPLS payload of SAToP of one E1 circuit laforge, 10/30/2021 10:33 AM

Updated by laforge over 2 years ago · 5 revisions

Add picture from clipboard (Maximum size: 48.8 MB)