This is obsolete, but if we want to use dhcp with some distros (like debian ppc 8.2 jessie), we need it.
At the bind level, we are not able to know the socket type so we try to guess it by analyzing the name. We manage only the case "ethX", "ethX" in spk_device is similar to set htons(0x6574) in sll_protocol in the normal case, and as this protocol does not exist, it's ok. SOCK_PACKET uses network endian to encode protocol in socket() in PACKET(7) : protocol is the IEEE 802.3 protocol number in network order. See the <linux/if_ether.h> include file for a list of allowed protocols. When protocol is set to htons(ETH_P_ALL) then all protocols are received. All incoming packets of that protocol type will be passed to the packet socket before they are passed to the protocols implemented in the kernel. v2: Split the patch in 4 parts to manage protocol endianness (socket()) and interface name (bind()) in different patches. Use TargetFdTrans array to manage the SOCK_PACKET type special case in bind(). The two others patches are here to introduce a new function in TargetFdTrans to translate sockaddr data structure (rename previous functions to be clear). Laurent Vivier (4): linux-user: SOCK_PACKET uses network endian to encode protocol in socket() linux-user: rename TargetFdFunc to TargetFdDataFunc, and structure fields accordingly linux-user: add a function hook to translate sockaddr linux-user: manage bind with a socket of SOCK_PACKET type. linux-user/syscall.c | 95 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 81 insertions(+), 14 deletions(-) -- 2.4.3