===== Project Description ===== %%FreeBSD%% lacks sophisticated layer2 and mixed layer2-layer3 filtering. ipfw performs mixed layer2-layer3 packet filtering using its own hooks in ether_demux/ether_output_frame and if_bridge. pf can't filter by layer2 addresses. I propose to improve both ipfw and pf to filter by layer2 addresses. Recent patches can be found in [[http://github.com/glk/l2filter|github repository]] Perforce repository: ''%%http://perforce.freebsd.org/changeList.cgi?CMD=changes&FSPC=//depot/projects/soc2008/gk%5fl2filter/...%%'' [[http://glebkurtsou.blogspot.com/|Blog]] ===== Milestones ===== === general === * Implement pfil hooks for filtering ethernet packets * Add mtag containing source and destination layer2 addresses to every mbuf * Add per interface flags: l2filter, l2tag === ipfw === * Update ipfw layer2 not to touch ip headers, but to use mentioned mtags to do MAC-IP filtering * Add src-ether and dst-ether ipfw options * Support mac addresses in ipfw lookup tables * Stateful filtering by mac addresses * Implement ARP filtering options * Update documentation === pf === * Add stateful filtering against mac addresses. Make it part of present layer3 stateful filtering. * Extend pf's tables facility to contain layer2 address apart with layer3 address. * Support in userspace (pf.conf, pfctl). * Update documentation