;-*- tab-wide: 4 -*- init_modules() ipsec_init() proc_net_create() ipsec_tdbinit() // transform descriptor block ¥Æ¡¼¥Ö¥ë ipsec_radijinit() // radix tree pfkey_init() // pfkey register_netdevice_notifier() inet_add_protocol() // esp,ah,ipcomp ipsec_tunnel_init_devices() register_netdev(&dev_ipsec[0-3]) ipsec_tunnel_probe(dev) ipsec_tunnel_init(dev) dev->open => ipsec_tunnel_open(dev) MOD_INC_USE_COUNT dev->stop => ipsec_tunnel_close(dev) MOD_DEC_USE_COUNT dev->hard_start_xmit => ipsec_tunnel_start_xmit(skb, dev) // call by dev_queue_xmit() ipsec_findroute(sockaddr_encap) // important ! DEV_QUEUE_XMIT(skb, physdev, ) dev->get_status => ipsec_tunnel_get_stats(dev) dev->priv // points struct ipsecpriv dev->do_ioctl => ipsec_tunnel_ioctl(dev, ifr, cmd) dev->neigh_setup => ipsec_tunnel_neigh_setup_dev(dev, neigh_parms) dev_init_buffers(dev); ipsec_sysctl_register() register_sysctl_table(ipsec_root_table, 0) cleanup_module() ipsec_cleanup() ipsec_sysctl_unregister() unregister_sysctl_table(ipsec_table_header) ipsec_tunnel_cleanup_devices() unregister_netdev() inet_del_protocol() // ah, esp,comp unregister_netdevice_notifier(ipsec_dev_notifier) ipsec_tdbcleanup() ipsec_radijcleanup() pfkey_cleanup() sock_unregister(PF_KEY) supported_remove_all() // ah, esp, ipcomp, ipip proc_net_unregister()