Work in Progress

Introduction 

MAP-T (RFC 7599) is a stateless IPv4/IPv6 transition mechanism that enables IPv4 services over an IPv6-only network using algorithmic translation.

Translation happens at:

High-Level Architecture


Block Diagram

Configuration

Border Relay: Setup done in ubuntu machine ( linux kernel 5.15 )
Installation
  1. sudo apt-get install isc-dhcp-server
  2. Open file /etc/dhcp/dhcpd.conf and update as below

    ddns-update-style none;
    default-lease-time 3600;
    max-lease-time 7200;
    authoritative;
    option custom-upstream-rate code 242 = unsigned integer 32;
    option custom-downstream-rate code 243 = unsigned integer 32;

    option domain-name "hsd.pa.crnrstn.comcast.net" ;

    subnet 10.42.0.0 netmask 255.255.255.0 {
        option routers 10.42.0.10;
        option broadcast-address 10.42.0.255;
        option domain-name-servers 1.1.1.1, 8.8.8.8;
        range 10.42.0.3 10.42.0.254;

    }

  3. Open file /etc/radvd.conf

    interface eth1 {
        AdvSendAdvert on;
        AdvManagedFlag on;
        AdvOtherConfigFlag on;

        prefix 2001:558:6013:100::/64 {
            AdvOnLink on;
            AdvAutonomous on;
        };

    };

  4. Open file  /etc/dhcp/dhcpd6.conf and update as below 

    ddns-update-style none;
    default-lease-time 3600;
    max-lease-time 7200;
    option dhcp-renewal-time 1800;
    option dhcp-rebinding-time 2880;
    option client-class-information code 97 = string;
    authoritative;
    option dhcp6.map-option code 95 = string;
    subnet6 2001:558:6013:0100::/64 {
        range6 2001:558:6013:0100::1000 2001:558:6013:0100::1fff;
        prefix6 2001:558:6013:0100:: 2001:558:6013:fe00:: /56;
        option dhcp6.map-option 00:59:00:16:00:08:18:c0:a8:14:00:30:20:01:05:58:60:13:00:5d:00:04:08:08:00:00:00:5b:00:09:40:00:64:ff:9b:00:00:00:00;
        option dhcp6.name-servers
        2001:4860:4860::8888,
        2001:4860:4860::8844;
    }

  5. Once all changes are done, restart the dhcpd and radvd service.
    sudo systemctl restart isc-dhcp-server
    sudo systemctl restart isc-dhcp-server6
    sudo systemctl restart radvd
    ● isc-dhcp-server.service - ISC DHCP IPv4 server
         Loaded: loaded (/lib/systemd/system/isc-dhcp-server.service; disabled; vendor preset: enabled)
         Active: active (running) since Mon 2026-04-06 15:22:33 IST; 135ms ago
           Docs: man:dhcpd(8)
       Main PID: 45322 (dhcpd)
          Tasks: 4 (limit: 18942)
         Memory: 4.6M
            CPU: 24ms
         CGroup: /system.slice/isc-dhcp-server.service
                 └─45322 dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcpd.pid -cf /etc/dhcp/dhcpd.conf eth1
    
    Apr 06 15:22:33 CHTSL00399 dhcpd[45322]: PID file: /run/dhcp-server/dhcpd.pid
    Apr 06 15:22:33 CHTSL00399 dhcpd[45322]: Wrote 3 leases to leases file.
    Apr 06 15:22:33 CHTSL00399 sh[45322]: Wrote 3 leases to leases file.
    Apr 06 15:22:33 CHTSL00399 dhcpd[45322]: Listening on LPF/eth1/70:88:6b:81:04:e6/10.42.0.0/24
    Apr 06 15:22:33 CHTSL00399 sh[45322]: Listening on LPF/eth1/70:88:6b:81:04:e6/10.42.0.0/24
    Apr 06 15:22:33 CHTSL00399 sh[45322]: Sending on   LPF/eth1/70:88:6b:81:04:e6/10.42.0.0/24
    Apr 06 15:22:33 CHTSL00399 sh[45322]: Sending on   Socket/fallback/fallback-net
    Apr 06 15:22:33 CHTSL00399 dhcpd[45322]: Sending on   LPF/eth1/70:88:6b:81:04:e6/10.42.0.0/24
    Apr 06 15:22:33 CHTSL00399 dhcpd[45322]: Sending on   Socket/fallback/fallback-net
    Apr 06 15:22:33 CHTSL00399 dhcpd[45322]: Server starting service.
    ● isc-dhcp-server6.service - ISC DHCP IPv6 server
         Loaded: loaded (/lib/systemd/system/isc-dhcp-server6.service; enabled; vendor preset: enabled)
         Active: active (running) since Mon 2026-04-06 15:22:33 IST; 122ms ago
           Docs: man:dhcpd(8)
       Main PID: 45333 (dhcpd)
          Tasks: 4 (limit: 18942)
         Memory: 3.3M
            CPU: 18ms
         CGroup: /system.slice/isc-dhcp-server6.service
                 └─45333 dhcpd -user dhcpd -group dhcpd -f -6 -pf /run/dhcp-server/dhcpd6.pid -cf /etc/dhcp/dhcpd6.conf eth1
    
    Apr 06 15:22:33 CHTSL00399 dhcpd[45333]: PID file: /run/dhcp-server/dhcpd6.pid
    Apr 06 15:22:33 CHTSL00399 sh[45333]: Wrote 0 NA, 0 TA, 0 PD leases to lease file.
    Apr 06 15:22:33 CHTSL00399 dhcpd[45333]: Wrote 0 NA, 0 TA, 0 PD leases to lease file.
    Apr 06 15:22:33 CHTSL00399 dhcpd[45333]: Bound to *:547
    Apr 06 15:22:33 CHTSL00399 sh[45333]: Bound to *:547
    Apr 06 15:22:33 CHTSL00399 dhcpd[45333]: Listening on Socket/7/eth1/2001:558:6013:100::/64
    Apr 06 15:22:33 CHTSL00399 sh[45333]: Listening on Socket/7/eth1/2001:558:6013:100::/64
    Apr 06 15:22:33 CHTSL00399 sh[45333]: Sending on   Socket/7/eth1/2001:558:6013:100::/64
    Apr 06 15:22:33 CHTSL00399 dhcpd[45333]: Sending on   Socket/7/eth1/2001:558:6013:100::/64
    Apr 06 15:22:33 CHTSL00399 dhcpd[45333]: Server starting service.
    ● radvd.service - Router advertisement daemon for IPv6
         Loaded: loaded (/lib/systemd/system/radvd.service; disabled; vendor preset: enabled)
         Active: active (running) since Mon 2026-04-06 15:22:33 IST; 37ms ago
           Docs: man:radvd(8)
        Process: 45348 ExecStartPre=/usr/sbin/radvd --logmethod stderr_clean --configtest (code=exited, status=0/SUCCESS)
        Process: 45349 ExecStart=/usr/sbin/radvd --logmethod stderr_clean (code=exited, status=0/SUCCESS)
       Main PID: 45350 (radvd)
          Tasks: 2 (limit: 18942)
         Memory: 516.0K
            CPU: 64ms
         CGroup: /system.slice/radvd.service
                 ├─45350 /usr/sbin/radvd --logmethod stderr_clean
                 └─45351 /usr/sbin/radvd --logmethod stderr_clean
    
    Apr 06 15:22:33 CHTSL00399 systemd[1]: Starting Router advertisement daemon for IPv6...
    Apr 06 15:22:33 CHTSL00399 radvd[45348]: config file, /etc/radvd.conf, syntax ok
    Apr 06 15:22:33 CHTSL00399 radvd[45349]: version 2.18 started
    Apr 06 15:22:33 CHTSL00399 systemd[1]: Started Router advertisement daemon for IPv6.

Note: If using shared to other computers networkmanager will take care of sharing ipv4 and ipv6 internet. If using manual IP add required FORWARD rules in iptables.
To ping IPv6 add sudo ip6tables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

Jool Installation
Customer Edge: Enable/Disable MAPT feature with below distro's from build

DISTRO_FEATURES_append = " feature_mapt"
DISTRO_FEATURES_append = " nat46"

Enable MAPT in BPI using the mapt rfc datatmodel

root@Filogic-GW:~# dmcli eRT getv Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Feature.MAP-T.Enable
CR component name is: eRT.com.cisco.spvtg.ccsp.CR
subsystem_prefix eRT.
Execution succeed.
Parameter    1 name: Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Feature.MAP-T.Enable
               type:       bool,    value: true 

Check map0 interface created and erouter0 should have only IPv6 addr

root@Filogic-GW:~# ifconfig map0
map0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet6 addr: fe80::c534:91eb:b45d:b579/64 Scope:Link
          UP POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
          RX packets:123 errors:0 dropped:0 overruns:0 frame:0
          TX packets:90 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5161 (5.0 KiB)  TX bytes:0 (0.0 B)
root@Filogic-GW:~# ifconfig erouter0
erouter0  Link encap:Ethernet  HWaddr 02:01:00:39:58:64  
          inet6 addr: 2001:558:6013:100::175f/128 Scope:Global
          inet6 addr: fe80::1:ff:fe39:5864/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:637 errors:0 dropped:0 overruns:0 frame:0
          TX packets:599 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:105610 (103.1 KiB)  TX bytes:105608 (103.1 KiB)

root@Filogic-GW:~# 


Test Results

Ping and Internet should work in CE and connected clients

Datamodels

root@Filogic-GW:~# dmcli eRT getv Device.DHCPv6.Client.1.X_RDKCENTRAL-COM_RcvOption.
CR component name is: eRT.com.cisco.spvtg.ccsp.CR
subsystem_prefix eRT.
Execution succeed.
Parameter    1 name: Device.DHCPv6.Client.1.X_RDKCENTRAL-COM_RcvOption.MapTransportMode
               type:     string,    value: MAPT 
Parameter    2 name: Device.DHCPv6.Client.1.X_RDKCENTRAL-COM_RcvOption.MapBRPrefix
               type:     string,    value: 64:ff9b::/64 
Parameter    3 name: Device.DHCPv6.Client.1.X_RDKCENTRAL-COM_RcvOption.MapRuleIPv4Prefix
               type:     string,    value: 192.168.20.0 
Parameter    4 name: Device.DHCPv6.Client.1.X_RDKCENTRAL-COM_RcvOption.MapRuleIPv6Prefix
               type:     string,    value: 2001:558:6013::/48 
Parameter    5 name: Device.DHCPv6.Client.1.X_RDKCENTRAL-COM_RcvOption.MapEALen
               type:       uint,    value: 8 
Parameter    6 name: Device.DHCPv6.Client.1.X_RDKCENTRAL-COM_RcvOption.MapPSIDOffset
               type:       uint,    value: 8 
Parameter    7 name: Device.DHCPv6.Client.1.X_RDKCENTRAL-COM_RcvOption.MapPSIDLen
               type:       uint,    value: 8 
Parameter    8 name: Device.DHCPv6.Client.1.X_RDKCENTRAL-COM_RcvOption.MapPSID
               type:       uint,    value: 0 
Parameter    9 name: Device.DHCPv6.Client.1.X_RDKCENTRAL-COM_RcvOption.MapIsFMR
               type:       bool,    value: false 
Parameter   10 name: Device.DHCPv6.Client.1.X_RDKCENTRAL-COM_RcvOption.MapIpv4Address
               type:     string,    value: 192.168.20.254 
Parameter   11 name: Device.DHCPv6.Client.1.X_RDKCENTRAL-COM_RcvOption.MapRatio
               type:       uint,    value: 1 

References

RFC7599: https://www.rfc-editor.org/rfc/rfc7599

Mapt simulation tool: https://map46.cisco.com/

Jool official: https://www.jool.mx/en/map-t.html

Mapt physical setup link: MAP-T Physical setup