|  | filter.txt: Linux Socket Filtering | 
|  | Written by: Jay Schulist <jschlst@samba.org> | 
|  |  | 
|  | Introduction | 
|  | ============ | 
|  |  | 
|  | Linux Socket Filtering is derived from the Berkeley | 
|  | Packet Filter. There are some distinct differences between | 
|  | the BSD and Linux Kernel Filtering. | 
|  |  | 
|  | Linux Socket Filtering (LSF) allows a user-space program to | 
|  | attach a filter onto any socket and allow or disallow certain | 
|  | types of data to come through the socket. LSF follows exactly | 
|  | the same filter code structure as the BSD Berkeley Packet Filter | 
|  | (BPF), so referring to the BSD bpf.4 manpage is very helpful in | 
|  | creating filters. | 
|  |  | 
|  | LSF is much simpler than BPF. One does not have to worry about | 
|  | devices or anything like that. You simply create your filter | 
|  | code, send it to the kernel via the SO_ATTACH_FILTER ioctl and | 
|  | if your filter code passes the kernel check on it, you then | 
|  | immediately begin filtering data on that socket. | 
|  |  | 
|  | You can also detach filters from your socket via the | 
|  | SO_DETACH_FILTER ioctl. This will probably not be used much | 
|  | since when you close a socket that has a filter on it the | 
|  | filter is automagically removed. The other less common case | 
|  | may be adding a different filter on the same socket where you had another | 
|  | filter that is still running: the kernel takes care of removing | 
|  | the old one and placing your new one in its place, assuming your | 
|  | filter has passed the checks, otherwise if it fails the old filter | 
|  | will remain on that socket. | 
|  |  | 
|  | Examples | 
|  | ======== | 
|  |  | 
|  | Ioctls- | 
|  | setsockopt(sockfd, SOL_SOCKET, SO_ATTACH_FILTER, &Filter, sizeof(Filter)); | 
|  | setsockopt(sockfd, SOL_SOCKET, SO_DETACH_FILTER, &value, sizeof(value)); | 
|  |  | 
|  | See the BSD bpf.4 manpage and the BSD Packet Filter paper written by | 
|  | Steven McCanne and Van Jacobson of Lawrence Berkeley Laboratory. |