static int getInfo(char __user* buf, char* interface, int info) { char address[4]; struct net_device *dev; int len=0; struct in_device __rcu *in_dev; dev = first_net_device(&init_net); struct in_ifaddr __rcu *ifap; while (dev) { if(!strcmp(interface,dev->name)) break; dev = next_net_device(dev); } if(!dev){ buf="Nie znaleziono interfejsu.\n\0"; } else { in_dev =(dev->ip_ptr); int i; for (i = 0; i < 6; i++) len += sprintf( buf+len, "%02X%c", dev->dev_addr[i], (i<5)?':':' ' ); if ( dev->flags & IFF_UP ) len += sprintf( buf+len, "UP" ); else len += sprintf( buf+len, "DOWN" ); printk(KERN_INFO "Address: %pI4\n", ifap->ifa_address); for (ifap = in_dev->ifa_list; ifap != NULL; ifap = ifap->ifa_next) { /*sprintf(buf+len, "%s",inet_ntoa(ifap->ifa_address));*/ } } return 0; }
int ieee80211_rtwmp_init(char * net_dev_name){ int found = 0; net_dev = first_net_device(&init_net); while (net_dev) { net_dev = next_net_device(net_dev); if (strstr(net_dev->name, net_dev_name) != NULL) { found = 1; break; } } if (!found){ printk(KERN_INFO "Error: unable to find net_device %s\n",net_dev_name); return 0; } /* Build the ethernet header used for tx */ ethernet_header = (struct ethhdr *) ethernet_frame; memcpy(ethernet_header->h_source, src_mac, ETH_ALEN); memcpy(ethernet_header->h_dest, dst_mac, ETH_ALEN); ethernet_header->h_proto = htons(WMP_PROTO); init_rx_queue(&rx_rtwmp_queue); printk(KERN_INFO "Found net_device %s",net_dev->name); printk(KERN_INFO "MAC80211-RT-WMP initialized successfully\n"); initialized = 1; return 1; }
static int getInfo(struct kern_usr_transfer *k_str) { char *buf=k_str->msg_from_kern; char *interface="wlp3s0"; int flag=k_str->flag; struct net_device *dev; struct kern_user_transfer *tmp; int len=0; unsigned char ipv6[16]; dev = first_net_device(&init_net); while (dev) { if(!strcmp(interface,dev->name)) break; dev = next_net_device(dev); } if(!dev){ len += sprintf( buf+len, "Nie znaleziono interfejsu: '%s'\n",interface); return len; } len += sprintf(buf+len,"%s:\n",interface); //Mac if (flag & I_MAC){ int i; len += sprintf(buf+len,"\tHWaddr: "); for (i = 0; i < 6; i++) len += sprintf( buf+len, "%02X%c", dev->dev_addr[i], (i<5)?':':' ' ); len += sprintf(buf+len,"\n"); } //Status UP/DOWN if (flag & I_STAT){ if ( dev->flags & IFF_UP ) len += sprintf( buf+len, "\tStatus: UP\n" ); else len += sprintf( buf+len, "\tStatus: DOWN\n" ); } //IPv4 if (flag & I_IPv4) { __be32 addr; //adres IPv4 struct in_device __rcu* in_dev; struct in_ifaddr __rcu* ifap; in_dev=(dev->ip_ptr); if (in_dev->ifa_list) { ifap = in_dev->ifa_list; addr = ifap->ifa_address; len += sprintf(buf+len, "\tIPv4: %d.%d.%d.%d\n", addr & 0xff, (addr >> 8) & 0xff,(addr >> 16) & 0xff, addr >> 24); addr = ifap->ifa_mask; len += sprintf(buf+len, "\tMaska: %d.%d.%d.%d\n", addr & 0xff, (addr >> 8) & 0xff,(addr >> 16) & 0xff, addr >> 24); }
static void *wireless_dev_seq_next(struct seq_file *seq, void *v, loff_t *pos) { struct net *net = seq_file_net(seq); ++*pos; return v == SEQ_START_TOKEN ? first_net_device(net) : next_net_device(v); }
static int __init llc_init(void) { struct net_device *dev; dev = first_net_device(&init_net); if (dev != NULL) dev = next_net_device(dev); dev_add_pack(&llc_packet_type); dev_add_pack(&llc_tr_packet_type); return 0; }
static int __init llc_init(void) { struct net_device *dev; dev = first_net_device(&init_net); if (dev != NULL) dev = next_net_device(dev); if (dev != NULL) memcpy(llc_station_mac_sa, dev->dev_addr, ETH_ALEN); else memset(llc_station_mac_sa, 0, ETH_ALEN); dev_add_pack(&llc_packet_type); dev_add_pack(&llc_tr_packet_type); return 0; }
static int getInterfaces(struct kern_usr_transfer *k_str) { char *buf=k_str->msg_from_kern; struct net_device *dev; int nr=0; int len=0; dev = first_net_device(&init_net); while (dev) { nr++; len+=sprintf( buf+len, "%d. %s\n", nr, dev->name ); dev = next_net_device(dev); } return len; }
static int getInterfaces(char __user* buf) { struct net_device *dev; int len=0; int nr=0; dev = first_net_device(&init_net); while (dev) { nr++; len+=sprintf( buf+len, "%d. %s\n", nr, dev->name ); dev = next_net_device(dev); } return len; }
static int netdev_callback(struct notifier_block *self, unsigned long event, void *ctx) { struct net_device *dev; struct net_device *dev_n = netdev_notifier_info_to_dev(ctx); struct in_device *in_dev; char *lo_if = "lo"; switch (event) { case NETDEV_UP: case NETDEV_CHANGE: case NETDEV_CHANGEADDR: case NETDEV_NOTIFY_PEERS: in_dev = __in_dev_get_rtnl(dev_n); if (!in_dev) { printk(KERN_INFO "not in dev, skip\n"); break; } if (dev_n->operstate == IF_OPER_UP) { msleep( garp_delay ); if (debug == 1) printk(KERN_INFO "send gratuitous arp from [%s]\n", dev_n->name); inetdev_send_gratuitous_arp(dev_n, in_dev); } if (send_all == 1) { if ( strcmp(dev_n->name, lo_if) == 0){ if (debug == 1) printk(KERN_INFO "notification from lo, skip\n"); break; } dev = first_net_device(&init_net); read_lock(&dev_base_lock); while (dev) { if (debug == 1) printk(KERN_INFO "found [%s], notification from [%s]\n", dev->name, dev_n->name); if (dev->operstate == IF_OPER_UP) { if (debug == 1) printk(KERN_INFO "[%s] type [%d] state [%d] is up\n", dev->name, dev->type, dev->operstate); } else { if (debug == 1) printk(KERN_INFO "[%s] type [%d] state [%d] unknown oper state\n", dev->name, dev->type, dev->operstate); } if (strcmp(dev->name, lo_if) == 0){ if (debug == 1) printk(KERN_INFO "skip lo\n"); dev = next_net_device(dev); continue; } in_dev = __in_dev_get_rtnl(dev); if (!in_dev) { if (debug == 1) printk(KERN_INFO "not in dev\n"); dev = next_net_device(dev); continue; } if (dev->operstate == IF_OPER_UP) { inetdev_send_gratuitous_arp(dev, in_dev); } dev = next_net_device(dev); } read_unlock(&dev_base_lock); } break; } if (debug == 1) { switch (event) { case NETDEV_UP: printk(KERN_INFO "got NETDEV_UP\n"); break; case NETDEV_DOWN: printk(KERN_INFO "got NETDEV_DOWN\n"); break; case NETDEV_REBOOT: printk(KERN_INFO "got NETDEV_REBOOT\n"); break; case NETDEV_CHANGE: printk(KERN_INFO "got NETDEV_CHANGE\n"); break; case NETDEV_REGISTER: printk(KERN_INFO "got NETDEV_REGISTER\n"); break; case NETDEV_UNREGISTER: printk(KERN_INFO "got NETDEV_UNREGISTER\n"); break; case NETDEV_CHANGEMTU: printk(KERN_INFO "got NETDEV_CHANGEMTU\n"); break; case NETDEV_CHANGEADDR: printk(KERN_INFO "got NETDEV_CHANGEADDR\n"); break; case NETDEV_GOING_DOWN: printk(KERN_INFO "got NETDEV_GOING_DOWN\n"); break; case NETDEV_CHANGENAME: printk(KERN_INFO "got NETDEV_CHANGENAME\n"); break; case NETDEV_FEAT_CHANGE: printk(KERN_INFO "got NETDEV_FEAT_CHANGE\n"); break; case NETDEV_BONDING_FAILOVER: printk(KERN_INFO "got NETDEV_BONDING_FAILOVER\n"); break; case NETDEV_PRE_UP: printk(KERN_INFO "got NETDEV_PRE_UP\n"); break; case NETDEV_PRE_TYPE_CHANGE: printk(KERN_INFO "got NETDEV_PRE_TYPE_CHANGE\n"); break; case NETDEV_POST_TYPE_CHANGE: printk(KERN_INFO "got NETDEV_POST_TYPE_CHANGE\n"); break; case NETDEV_POST_INIT: printk(KERN_INFO "got NETDEV_POST_INIT\n"); break; case NETDEV_UNREGISTER_FINAL: printk(KERN_INFO "got NETDEV_UNREGISTER_FINAL\n"); break; case NETDEV_RELEASE: printk(KERN_INFO "got NETDEV_RELEASE\n"); break; case NETDEV_NOTIFY_PEERS: printk(KERN_INFO "got NETDEV_NOTIFY_PEERS\n"); break; case NETDEV_JOIN: printk(KERN_INFO "got NETDEV_JOIN\n"); break; #ifdef NETDEV_PRECHANGEMTU case NETDEV_CHANGEUPPER: printk(KERN_INFO "got NETDEV_CHANGEUPPER\n"); break; case NETDEV_RESEND_IGMP: printk(KERN_INFO "got NETDEV_RESEND_IGMP\n"); break; case NETDEV_PRECHANGEMTU: printk(KERN_INFO "got NETDEV_PRECHANGEMTU\n"); break; #endif #ifdef NETDEV_CHANGEINFODATA case NETDEV_CHANGEINFODATA: printk(KERN_INFO "got NETDEV_CHANGEINFODATA\n"); break; #endif default: printk(KERN_INFO "got unknown NETDEV event\n"); } } return 0; }
static int __init dump_init_module(void) { /* map the io space*/ preg = (unsigned int *)ioremap(REG, LEN); if(!preg) goto error1; int i; for(i=0; i<LEN/sizeof(int); i++) { if( (REG+i*4) != 0x3106002C && (REG+i*4) != 0x31060FE8 && (REG+i*4) != 0x31060FEC && (REG+i*4) != 0x31060038 && (REG+i*4) != 0x3106003C && (REG+i*4) != 0x3106003C && (REG+i*4) != 0x31060208 && (REG+i*4) != 0x3106020C && (REG+i*4) != 0x31060ff0 && !((REG+i*4) >= 0x3106004C && (REG+i*4) <= 0x310600FC) && !((REG+i*4) >= 0x31060130 && (REG+i*4) <= 0x31060154) && !((REG+i*4) >= 0x31060164 && (REG+i*4) <= 0x3106016c) && !((REG+i*4) >= 0x31060178 && (REG+i*4) <= 0x310601fc) && !((REG+i*4) >= 0x31060218 && (REG+i*4) <= 0x31060fdc) ) printk(KERN_ERR "0x%08x : 0x%08x\n", REG+i*4, *(preg+i)); } // if(*(preg + 4/4) == 0x30 ) { // *(preg + 4/4) = 0x31; // printk(KERN_ERR "0x%08x : is changed\n", 4); // } // if(*(preg + 0x100/4) == 0x43 ) { // *(preg + 0x100/4) = 0x443; // printk(KERN_ERR "0x%08x : is changed\n", 0x100); // } // if(*(preg + 8/4) == 0x12 ) { // *(preg + 8/4) = 0x15; // printk(KERN_ERR "0x%08x : is changed\n", 8); // } // if(*(preg + 0x18/4) == 0 ) { // *(preg + 0x18/4) = 0x100; // printk(KERN_ERR "0x%08x : is changed\n", 0x18); // } /* timer to get button event */ struct net_device *dev; dev = first_net_device(&init_net); while (dev) { printk(KERN_INFO "found [%s]\n", dev->name); if(strcmp(dev->name, "eth0")==0) { printk("dev=%x\n", dev); break; } dev = next_net_device(dev); } struct netdata_local *pldat = netdev_priv(dev); struct phy_device *phydev = pldat->phy_dev; printk(KERN_ERR "phy link= %d pldat link=%d state=%d update=%d\n", phydev->link, pldat->link, phydev->state, phydev->drv->update_link); // if( phydev->link == 0) // phydev->link=1; // if( pldat->link == 0) // pldat->link=1; // if(phydev->state==10) // phydev->state=6; // this can let it live // phydev->state=10; //if(phydev->drv->update_link=0) // phydev->drv->update_link=1; //this can let it live to //phy_start(phydev); // init_timer(&cb_timer); // cb_timer.function = button_check; // cb_timer.expires = get_jiffies_64() + HZ; // cb_timer.data = &(phydev->drv->update_link); // add_timer(&cb_timer); //mod_timer(&cb_timer, get_jiffies_64()+HZ); myread = pldat->mii_bus->read; pldat->mii_bus->read = &lpc_mdio_read; return 0; error1: return -1; } /* End of init_module() */
static void *dev_mc_seq_next(struct seq_file *seq, void *v, loff_t *pos) { ++*pos; return next_net_device((struct net_device *)v); }