/* * Function vlan_proto_init (pro) * * Initialize VLAN protocol layer, * */ static int __init vlan_proto_init(void) { int err; printk(VLAN_INF "%s v%u.%u %s\n", vlan_fullname, vlan_version, vlan_release, vlan_copyright); printk(VLAN_INF "Other stuff added by %s\n", vlan_buggyright); /* proc file system initialization */ err = vlan_proc_init(); if (err < 0) { printk(KERN_ERR "%s %s: can't create entry in proc filesystem!\n", __FUNCTION__, VLAN_NAME); return 1; } dev_add_pack(&vlan_packet_type); /* Register us to receive netdevice events */ register_netdevice_notifier(&vlan_notifier_block); vlan_ioctl_hook = vlan_ioctl_handler; return 0; }
static int __init br_netfilter_init(void) { int ret; ret = register_pernet_subsys(&brnf_net_ops); if (ret < 0) return ret; ret = register_netdevice_notifier(&brnf_notifier); if (ret < 0) { unregister_pernet_subsys(&brnf_net_ops); return ret; } #ifdef CONFIG_SYSCTL brnf_sysctl_header = register_net_sysctl(&init_net, "net/bridge", brnf_table); if (brnf_sysctl_header == NULL) { printk(KERN_WARNING "br_netfilter: can't register to sysctl.\n"); unregister_netdevice_notifier(&brnf_notifier); unregister_pernet_subsys(&brnf_net_ops); return -ENOMEM; } #endif RCU_INIT_POINTER(nf_br_ops, &br_ops); printk(KERN_NOTICE "Bridge firewalling registered\n"); return 0; }
static int __init br_init(void) { int err; err = stp_proto_register(&br_stp_proto); if (err < 0) { pr_err("bridge: can't register sap for STP\n"); return err; } err = br_fdb_init(); if (err) goto err_out; err = register_pernet_subsys(&br_net_ops); if (err) goto err_out1; err = br_nf_core_init(); if (err) goto err_out2; err = register_netdevice_notifier(&br_device_notifier); if (err) goto err_out3; err = register_netdev_switch_notifier(&br_netdev_switch_notifier); if (err) goto err_out4; err = br_netlink_init(); if (err) goto err_out5; brioctl_set(br_ioctl_deviceless_stub); #if IS_ENABLED(CONFIG_ATM_LANE) br_fdb_test_addr_hook = br_fdb_test_addr; #endif pr_info("bridge: automatic filtering via arp/ip/ip6tables has been " "deprecated. Update your scripts to load br_netfilter if you " "need this.\n"); return 0; err_out5: unregister_netdev_switch_notifier(&br_netdev_switch_notifier); err_out4: unregister_netdevice_notifier(&br_device_notifier); err_out3: br_nf_core_fini(); err_out2: unregister_pernet_subsys(&br_net_ops); err_out1: br_fdb_fini(); err_out: stp_proto_unregister(&br_stp_proto); return err; }
int tipc_eth_media_start(void) { struct tipc_media_addr bcast_addr; int res; if (eth_started) return -EINVAL; bcast_addr.type = htonl(TIPC_MEDIA_TYPE_ETH); memset(&bcast_addr.dev_addr, 0xff, ETH_ALEN); memset(eth_bearers, 0, sizeof(eth_bearers)); res = tipc_register_media(TIPC_MEDIA_TYPE_ETH, "eth", enable_bearer, disable_bearer, send_msg, eth_addr2str, &bcast_addr, ETH_LINK_PRIORITY, ETH_LINK_TOLERANCE, ETH_LINK_WINDOW); if (res) return res; notifier.notifier_call = &recv_notification; notifier.priority = 0; res = register_netdevice_notifier(¬ifier); if (!res) eth_started = 1; return res; }
/* * Function vlan_proto_init (pro) * * Initialize VLAN protocol layer, * */ static int __init vlan_proto_init(void) { int err; printk(VLAN_INF "%s v%s\n", vlan_fullname, vlan_version); /* proc file system initialization */ err = vlan_proc_init(); if (err < 0) { printk(KERN_ERR "%s: can't create entry in proc filesystem!\n", __FUNCTION__); return err; } dev_add_pack(&vlan_packet_type); /* Register us to receive netdevice events */ err = register_netdevice_notifier(&vlan_notifier_block); if (err < 0) { dev_remove_pack(&vlan_packet_type); vlan_proc_cleanup(); return err; } vlan_ioctl_set(vlan_ioctl_handler); return 0; }
static int raw_init(struct sock *sk) { struct raw_sock *ro = raw_sk(sk); ro->bound = 0; ro->ifindex = 0; /* set default filter to single entry dfilter */ ro->dfilter.can_id = 0; ro->dfilter.can_mask = MASK_ALL; ro->filter = &ro->dfilter; ro->count = 1; /* set default loopback behaviour */ ro->loopback = 1; ro->recv_own_msgs = 0; ro->fd_frames = 0; ro->join_filters = 0; /* alloc_percpu provides zero'ed memory */ ro->uniq = alloc_percpu(struct uniqframe); if (unlikely(!ro->uniq)) return -ENOMEM; /* set notifier */ ro->notifier.notifier_call = raw_notifier; register_netdevice_notifier(&ro->notifier); return 0; }
static int macvtap_init(void) { int err; err = tap_create_cdev(&macvtap_cdev, &macvtap_major, "macvtap"); if (err) goto out1; err = class_register(&macvtap_class); if (err) goto out2; err = register_netdevice_notifier(&macvtap_notifier_block); if (err) goto out3; err = macvlan_link_register(&macvtap_link_ops); if (err) goto out4; return 0; out4: unregister_netdevice_notifier(&macvtap_notifier_block); out3: class_unregister(&macvtap_class); out2: tap_destroy_cdev(macvtap_major, &macvtap_cdev); out1: return err; }
static int __init vlan_proto_init(void) { int err; pr_info("%s v%s %s\n", vlan_fullname, vlan_version, vlan_copyright); err = register_pernet_subsys(&vlan_net_ops); if (err < 0) goto err0; err = register_netdevice_notifier(&vlan_notifier_block); if (err < 0) goto err2; err = vlan_gvrp_init(); if (err < 0) goto err3; return 0; err3: unregister_netdevice_notifier(&vlan_notifier_block); err2: unregister_pernet_subsys(&vlan_net_ops); err0: return err; }
static int raw_init(struct sock *sk) { struct raw_sock *ro = raw_sk(sk); ro->sk = sk; ro->bound = 0; ro->ifindex = 0; /* set default filter to single entry dfilter */ ro->dfilter.can_id = 0; ro->dfilter.can_mask = MASK_ALL; ro->filter = &ro->dfilter; ro->count = 1; /* set default loopback behaviour */ ro->loopback = 1; ro->recv_own_msgs = 0; /* set notifier */ ro->notifier.notifier_call = raw_notifier; register_netdevice_notifier(&ro->notifier); return 0; }
static int __init br_init(void) { int err; br_stp_sap = llc_sap_open(LLC_SAP_BSPAN, br_stp_rcv); if (!br_stp_sap) { printk(KERN_ERR "bridge: can't register sap for STP\n"); return -EADDRINUSE; } br_fdb_init(); err = br_netfilter_init(); if (err) goto err_out1; err = register_netdevice_notifier(&br_device_notifier); if (err) goto err_out2; br_netlink_init(); brioctl_set(br_ioctl_deviceless_stub); br_handle_frame_hook = br_handle_frame; br_fdb_get_hook = br_fdb_get; br_fdb_put_hook = br_fdb_put; return 0; err_out2: br_netfilter_fini(); err_out1: llc_sap_put(br_stp_sap); return err; }
static int __init vlan_proto_init(void) { int err; pr_info("%s v%s\n", vlan_fullname, vlan_version); err = register_pernet_subsys(&vlan_net_ops); if (err < 0) goto err0; err = register_netdevice_notifier(&vlan_notifier_block); if (err < 0) goto err2; err = vlan_gvrp_init(); if (err < 0) goto err3; err = vlan_netlink_init(); if (err < 0) goto err4; vlan_ioctl_set(vlan_ioctl_handler); return 0; err4: vlan_gvrp_uninit(); err3: unregister_netdevice_notifier(&vlan_notifier_block); err2: unregister_pernet_subsys(&vlan_net_ops); err0: return err; }
static int __init vrf_init_module(void) { int rc; vrf_dst_ops.kmem_cachep = kmem_cache_create("vrf_ip_dst_cache", sizeof(struct rtable), 0, SLAB_HWCACHE_ALIGN, NULL); if (!vrf_dst_ops.kmem_cachep) return -ENOMEM; rc = init_dst_ops6_kmem_cachep(); if (rc != 0) goto error2; register_netdevice_notifier(&vrf_notifier_block); rc = rtnl_link_register(&vrf_link_ops); if (rc < 0) goto error; return 0; error: unregister_netdevice_notifier(&vrf_notifier_block); free_dst_ops6_kmem_cachep(); error2: kmem_cache_destroy(vrf_dst_ops.kmem_cachep); return rc; }
int nm_os_ifnet_init(void) { int error = register_netdevice_notifier(&linux_netmap_netdev_notifier); if (!error) nm_os_ifnet_registered = 1; return error; }
int atm_mpoa_mpoad_attach (struct atm_vcc *vcc, int arg) { struct mpoa_client *mpc; struct lec_priv *priv; if (mpcs == NULL) { init_timer(&mpc_timer); mpc_timer_refresh(); /* This lets us now how our LECs are doing */ register_netdevice_notifier(&mpoa_notifier); } mpc = find_mpc_by_itfnum(arg); if (mpc == NULL) { dprintk("mpoa: mpoad_attach: allocating new mpc for itf %d\n", arg); mpc = alloc_mpc(); if (mpc == NULL) return -ENOMEM; mpc->dev_num = arg; mpc->dev = find_lec_by_itfnum(arg); /* NULL if there was no lec */ } if (mpc->mpoad_vcc) { printk("mpoa: mpoad_attach: mpoad is already present for itf %d\n", arg); return -EADDRINUSE; } if (mpc->dev) { /* check if the lec is LANE2 capable */ priv = (struct lec_priv *)mpc->dev->priv; if (priv->lane_version < 2) { dev_put(mpc->dev); mpc->dev = NULL; } else priv->lane2_ops->associate_indicator = lane2_assoc_ind; } mpc->mpoad_vcc = vcc; vcc->dev = &mpc_dev; vcc_insert_socket(vcc->sk); set_bit(ATM_VF_META,&vcc->flags); set_bit(ATM_VF_READY,&vcc->flags); if (mpc->dev) { char empty[ATM_ESA_LEN]; memset(empty, 0, ATM_ESA_LEN); start_mpc(mpc, mpc->dev); /* set address if mpcd e.g. gets killed and restarted. * If we do not do it now we have to wait for the next LE_ARP */ if ( memcmp(mpc->mps_ctrl_addr, empty, ATM_ESA_LEN) != 0 ) send_set_mps_ctrl_addr(mpc->mps_ctrl_addr, mpc); } __module_get(THIS_MODULE); return arg; }
static int __init send_garp_init(void) { if (debug == 1) printk(KERN_INFO "send_garp module loaded\n"); register_netdevice_notifier(&nb_dev); return 0; }
static int __init wireless_nlevent_init(void) { int err = register_pernet_subsys(&wext_pernet_ops); if (err) return err; return register_netdevice_notifier(&wext_netdev_notifier); }
static int __init ztdeth_init(void) { skb_queue_head_init(&skbs); dev_add_pack(&ztdeth_ptype); register_netdevice_notifier(&ztdeth_nblock); dahdi_dynamic_register_driver(&ztd_eth); return 0; }
int tipc_bearer_setup(void) { int err; err = register_netdevice_notifier(¬ifier); if (err) return err; dev_add_pack(&tipc_packet_type); return 0; }
static int __init br_init(void) { int err; err = stp_proto_register(&br_stp_proto); if (err < 0) { printk(KERN_ERR "bridge: can't register sap for STP\n"); return err; } err = br_fdb_init(); if (err) goto err_out; err = register_pernet_subsys(&br_net_ops); if (err) goto err_out1; err = br_netfilter_init(); if (err) goto err_out2; err = register_netdevice_notifier(&br_device_notifier); if (err) goto err_out3; err = br_netlink_init(); if (err) goto err_out4; get_ve0()->features |= VE_FEATURE_BRIDGE; brioctl_set(br_ioctl_deviceless_stub); br_handle_frame_hook = br_handle_frame; br_hard_xmit_hook = br_xmit; #if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE) br_fdb_test_addr_hook = br_fdb_test_addr; #endif return 0; err_out4: unregister_netdevice_notifier(&br_device_notifier); err_out3: br_netfilter_fini(); err_out2: unregister_pernet_subsys(&br_net_ops); err_out1: br_fdb_fini(); err_out: stp_proto_unregister(&br_stp_proto); return err; }
void ieee80211_debugfs_netdev_init(void) { int err; err = register_netdevice_notifier(&mac80211_debugfs_netdev_notifier); if (err) { printk(KERN_ERR "mac80211: failed to install netdev notifier," " disabling per-netdev debugfs!\n"); } else notif_registered = 1; }
static int __init br_init(void) { int err; err = stp_proto_register(&br_stp_proto); if (err < 0) { pr_err("bridge: can't register sap for STP\n"); return err; } err = br_fdb_init(); if (err) goto err_out; err = register_pernet_subsys(&br_net_ops); if (err) goto err_out1; err = br_netfilter_init(); if (err) goto err_out2; err = register_netdevice_notifier(&br_device_notifier); if (err) goto err_out3; err = br_netlink_init(); if (err) goto err_out4; brioctl_set(br_ioctl_deviceless_stub); #if defined(CONFIG_NETFILTER_XT_MATCH_PHYSDEV) || defined(CONFIG_NETFILTER_XT_MATCH_PHYSDEV_MODULE) br_fdb_get_port_hook = br_fdb_get_port; #endif #if IS_ENABLED(CONFIG_ATM_LANE) br_fdb_test_addr_hook = br_fdb_test_addr; #endif return 0; err_out4: unregister_netdevice_notifier(&br_device_notifier); err_out3: br_netfilter_fini(); err_out2: unregister_pernet_subsys(&br_net_ops); err_out1: br_fdb_fini(); err_out: stp_proto_unregister(&br_stp_proto); return err; }
int dpx_cfg_init(void) { if (systemcall_cb_reg(MODULEID_CFG, dpx_cfg_syscallback)) { return -1; } if_slot_notify_list_register(cfg_hot_slot_call_back, IF_SLOT_NOTIFY_LOWEST); cfg_spare_ifindex = drv_get_remote_ifindex(); register_netdevice_notifier(&cfg_notifier_block); return 0; }
int __init hyfi_notify_init(void) { int ret; ret = register_netdevice_notifier(&hyfi_device_notifier); rcu_assign_pointer(br_notify_hook, hyfi_br_notify); if (ret) { printk( KERN_ERR "hyfi: Failed to register to netdevice notifier\n" ); } return ret; }
/******************************************************************************* 函数名称 : sub_if_proto_init 功能描述 : 子接口事件注册 输入参数 : 无 输出参数 : 无 返回值 : 0 -------------------------------------------------------------------------------- 最近一次修改记录 : 修改作者 : 王松波 修改目的 : 新增函数 修改日期 : 2010-09-21 ********************************************************************************/ u32 sub_if_proto_init(void) { s32 ret; template1ifindex = if_dev_get_index_by_name("template1"); /* Register us to receive netdevice events */ ret = register_netdevice_notifier(&sub_if_notifier_block); if (ret < 0) { return ret; } reg_sub_interface_handle_func(sub_interface_input); return 0; }
static int __init br_init(void) { printk(KERN_INFO "NET4: Ethernet Bridge 008 for NET4.0\n"); br_handle_frame_hook = br_handle_frame; br_ioctl_hook = br_ioctl_deviceless_stub; #if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE) br_fdb_get_hook = br_fdb_get; br_fdb_put_hook = br_fdb_put; #endif register_netdevice_notifier(&br_device_notifier); return 0; }
static int __init rmnet_init(void) { int rc; rc = register_netdevice_notifier(&rmnet_dev_notifier); if (rc != 0) return rc; rc = rtnl_link_register(&rmnet_link_ops); if (rc != 0) { unregister_netdevice_notifier(&rmnet_dev_notifier); return rc; } return rc; }
static void netdev_trig_activate(struct led_classdev *led_cdev) { struct led_netdev_data *trigger_data; int rc; trigger_data = kzalloc(sizeof(struct led_netdev_data), GFP_KERNEL); if (!trigger_data) return; rwlock_init(&trigger_data->lock); trigger_data->notifier.notifier_call = netdev_trig_notify; trigger_data->notifier.priority = 10; setup_timer(&trigger_data->timer, netdev_trig_timer, (unsigned long) trigger_data); trigger_data->led_cdev = led_cdev; trigger_data->net_dev = NULL; trigger_data->device_name[0] = 0; trigger_data->mode = 0; trigger_data->interval = msecs_to_jiffies(50); trigger_data->link_up = 0; trigger_data->last_activity = 0; led_cdev->trigger_data = trigger_data; rc = device_create_file(led_cdev->dev, &dev_attr_device_name); if (rc) goto err_out; rc = device_create_file(led_cdev->dev, &dev_attr_mode); if (rc) goto err_out_device_name; rc = device_create_file(led_cdev->dev, &dev_attr_interval); if (rc) goto err_out_mode; register_netdevice_notifier(&trigger_data->notifier); return; err_out_mode: device_remove_file(led_cdev->dev, &dev_attr_mode); err_out_device_name: device_remove_file(led_cdev->dev, &dev_attr_device_name); err_out: led_cdev->trigger_data = NULL; kfree(trigger_data); }
/** * tipc_ib_media_start - activate InfiniBand bearer support * * Register InfiniBand media type with TIPC bearer code. Also register * with OS for notifications about device state changes. */ int tipc_ib_media_start(void) { int res; if (ib_started) return -EINVAL; res = tipc_register_media(&ib_media_info); if (res) return res; res = register_netdevice_notifier(¬ifier); if (!res) ib_started = 1; return res; }
static int __init vrf_init_module(void) { int rc; register_netdevice_notifier(&vrf_notifier_block); rc = rtnl_link_register(&vrf_link_ops); if (rc < 0) goto error; return 0; error: unregister_netdevice_notifier(&vrf_notifier_block); return rc; }
static int __init br_init(void) { int err; br_stp_sap = llc_sap_open(LLC_SAP_BSPAN, br_stp_rcv); if (!br_stp_sap) { printk(KERN_ERR "bridge: can't register sap for STP\n"); return -EADDRINUSE; } //网桥数据库初始化,分配slab缓冲区 err = br_fdb_init(); if (err) goto err_out; //netfilter钩子初始 err = br_netfilter_init(); if (err) goto err_out1; ////在netdev_chain通知链表上注册 err = register_netdevice_notifier(&br_device_notifier); if (err) goto err_out2; err = br_netlink_init(); if (err) goto err_out3; //设置ioctl钩子函数:br_ioctl_hook //通过brctl addbr br0命令建立网桥,此处用户空间调用的brctl命令最终对应到内核中的br_ioctl_deviceless_stub处理函数 brioctl_set(br_ioctl_deviceless_stub); //设置报文处理钩子函数 br_handle_frame_hook = br_handle_frame; //网桥数据库处理钩子 br_fdb_get_hook = br_fdb_get; br_fdb_put_hook = br_fdb_put; return 0; err_out3: unregister_netdevice_notifier(&br_device_notifier); err_out2: br_netfilter_fini(); err_out1: br_fdb_fini(); err_out: llc_sap_put(br_stp_sap); return err; }