Docker Community Forums

Share and learn in the Docker community.

SOF_TIMESTAMPING_TX_SOFTWARE not exposed through macvlan

Dear Docker Community,

I am running into an interesting problem with no solution in sight, unfortunately, so I decided to ask smarter people as to what the solution might be

I created a customized Ubuntu 20.04 docker image with added linuxptp code on it, to use as a PTP client for my local testing. When using the default bridge adapter (“docker run -it ptpd-mh/ptp-006 bash”), the interface in docket (eth0) shows support for SOF_TIMESTAMPING_TX_SOFTWARE and SOF_TIMESTAMPING_RX_SOFTWARE properties, as shown below. I can run ptp4l with no issues in this configuration.

root@6088f78884bc:/# ethtool -T eth0
Time stamping parameters for eth0:
Capabilities:
        software-transmit     (SOF_TIMESTAMPING_TX_SOFTWARE)
        software-receive      (SOF_TIMESTAMPING_RX_SOFTWARE)
        software-system-clock (SOF_TIMESTAMPING_SOFTWARE)
PTP Hardware Clock: none
Hardware Transmit Timestamp Modes: none
Hardware Receive Filter Modes: none

The bridge does IP masquerading, though, so I wanted to switch to a macvlan and bridge the IP directly to my host network. I created a macvlan eth0 adapter for docker use

docker network inspect eth0 
[
    {
        "Name": "eth0",
        "Id": "69dfc284c39117ffc8a31d86d7c161737347abaebbe049bec2dce5733d91a286",
        "Created": "2021-09-10T14:24:18.659635659Z",
        "Scope": "local",
        "Driver": "macvlan",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "192.168.240.1/21",
                    "Gateway": "192.168.247.254"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {
            "parent": "ens160"
        },
        "Labels": {}
    }
]

and then ran my container as “docker run -it --rm --network=eth0 --ip=192.168.240.2 ptpd-mh/ptp-006 bash”, pointing to the macvlan eth0 interface. Back into shell in container, and this time I am not showing TX path PTP support exposed anymore, i.e., no “SOF_TIMESTAMPING_TX_SOFTWARE”, just "SOF_TIMESTAMPING_RX_SOFTWARE:.

root@1515e47315bb:/# ethtool -T eth0
Time stamping parameters for eth0:
Capabilities:
        software-receive      (SOF_TIMESTAMPING_RX_SOFTWARE)
        software-system-clock (SOF_TIMESTAMPING_SOFTWARE)
PTP Hardware Clock: none
Hardware Transmit Timestamp Modes: none
Hardware Receive Filter Modes: none

Since both the bridge and the macvlan point to the same NIC on the host, I do not understand the difference here as to what properties are exposed to the container, i.e., bridge vs macvlan seem to behave differently here.

Has anybody ran into this problem before and was able to find a workaround? This seems to be tied to the docker bridge vs macvlan difference as far as I can tell.

Thank you!