--- zzzz-none-000/linux-2.6.28.10/net/core/sock.c 2009-05-02 18:54:43.000000000 +0000 +++ fusiv-7390-686/linux-2.6.28.10/net/core/sock.c 2015-01-26 10:22:06.000000000 +0000 @@ -474,6 +474,8 @@ sk->sk_reuse = valbool; break; case SO_TYPE: + case SO_PROTOCOL: + case SO_DOMAIN: case SO_ERROR: ret = -ENOPROTOOPT; break; @@ -666,6 +668,14 @@ } break; + case SO_MARKTASK: /* AVM calle, for PUMA */ + if (!capable(CAP_NET_ADMIN)) + ret = -EPERM; + else { + current->netmark = val; + } + break; + /* We implement the SO_SNDLOWAT etc to not be settable (1003.1g 5.3) */ default: @@ -731,6 +741,14 @@ v.val = sk->sk_type; break; + case SO_PROTOCOL: + v.val = sk->sk_protocol; + break; + + case SO_DOMAIN: + v.val = sk->sk_family; + break; + case SO_ERROR: v.val = -sock_error(sk); if (v.val==0) @@ -840,6 +858,10 @@ v.val = sk->sk_mark; break; + case SO_MARKTASK: /* AVM calle, for PUMA */ + v.val = current->netmark; + break; + default: return -ENOPROTOOPT; } @@ -951,6 +973,7 @@ sk->sk_prot = sk->sk_prot_creator = prot; sock_lock_init(sk); sock_net_set(sk, get_net(net)); + sk->sk_mark = current->netmark; /* AVM calle */ } return sk;