On Tue, 2016-10-25 at 20:21 -0600, David Ahern wrote: > On 10/25/16 5:39 PM, Eric Dumazet wrote: > > On Tue, 2016-10-25 at 15:30 -0700, David Ahern wrote: > >> Add new cgroup based program type, BPF_PROG_TYPE_CGROUP_SOCK. Similar to > >> BPF_PROG_TYPE_CGROUP_SKB programs can be attached to a cgroup and run > >> any time a process in the cgroup opens an AF_INET or AF_INET6 socket. > >> Currently only sk_bound_dev_if is exported to userspace for modification > >> by a bpf program. > >> > >> This allows a cgroup to be configured such that AF_INET{6} sockets opened > >> by processes are automatically bound to a specific device. In turn, this > >> enables the running of programs that do not support SO_BINDTODEVICE in a > >> specific VRF context / L3 domain. > > > > Does this mean that these programs no longer can use loopback ? > > I am probably misunderstanding your question, so I'll ramble a bit and > see if I cover it. > > This patch set generically allows sk_bound_dev_if to be set to any > value. It does not check that an index corresponds to a device at that > moment (either bpf prog install or execution of the filter), and even > if it did the device can be deleted at any moment. That seems to be > standard operating procedure with bpf filters (user mistakes mean > packets go no where and in this case a socket is bound to a > non-existent device). > > The index can be any interface (e.g., eth0) or an L3 device (e.g., a > VRF). Loopback and index=1 is allowed. > > The VRF device is the loopback device for the domain, so binding to it > covers addresses on the VRF device as well as interfaces enslaved to > it. > > Did you mean something else?
Maybe I do not understand how you plan to use this. Let say you want a filter to force a BIND_TO_DEVICE xxx because a task runs in a cgroup yyy Then a program doing a socket() + connect (127.0.0.1) will fail ? I do not see how a BPF filter at socket() time can be selective.