68394ec88e
* Rewrite interface tables to use interface indexes Kernel changes: * Add generic interface tracking API: - ipfw_iface_ref (must call unlocked, performs lazy init if needed, allocates state & bumps ref) - ipfw_iface_add_ntfy(UH_WLOCK+WLOCK, links comsumer & runs its callback to update ifindex) - ipfw_iface_del_ntfy(UH_WLOCK+WLOCK, unlinks consumer) - ipfw_iface_unref(unlocked, drops reference) Additionally, consumer callbacks are called in interface withdrawal/departure. * Rewrite interface tables to use iface tracking API. Currently tables are implemented the following way: runtime data is stored as sorted array of {ifidx, val} for existing interfaces full data is stored inside namedobj instance (chained hashed table). * Add IP_FW_XIFLIST opcode to dump status of tracked interfaces * Pass @chain ptr to most non-locked algorithm callbacks: (prepare_add, prepare_del, flush_entry ..). This may be needed for better interaction of given algorithm an other ipfw subsystems * Add optional "change_ti" algorithm handler to permit updating of cached table_info pointer (happens in case of table_max resize) * Fix small bug in ipfw_list_tables() * Add badd (insert into sorted array) and bdel (remove from sorted array) funcs Userland changes: * Add "iflist" cmd to print status of currently tracked interface * Add stringnum_cmp for better interface/table names sorting |
||
---|---|---|
.. | ||
test | ||
dn_heap.c | ||
dn_heap.h | ||
dn_sched_fifo.c | ||
dn_sched_prio.c | ||
dn_sched_qfq.c | ||
dn_sched_rr.c | ||
dn_sched_wf2q.c | ||
dn_sched.h | ||
dummynet.txt | ||
ip_dn_glue.c | ||
ip_dn_io.c | ||
ip_dn_private.h | ||
ip_dummynet.c | ||
ip_fw2.c | ||
ip_fw_dynamic.c | ||
ip_fw_iface.c | ||
ip_fw_log.c | ||
ip_fw_nat.c | ||
ip_fw_pfil.c | ||
ip_fw_private.h | ||
ip_fw_sockopt.c | ||
ip_fw_table_algo.c | ||
ip_fw_table.c | ||
ip_fw_table.h |