int scan(char * devname){ char mac[14]={0x7a,0x7a,0x7a,0x7a,0x7a, 0x5b,0x5b,0x5b,0x5b,0x5b, 0x3c,0x6d,0x9e,0x5e}; int res; unsigned char ch; struct sockdata *sk=nrf_socket(devname); if(!sk)return -1; CHECK(set_if_down(sk),res,err); CHECK(setmac(sk,mac,sizeof(mac)),res,err); CHECK(setpipes(sk,0x1),res, err); CHECK(getpipes(sk,&ch),res,err); if(ch!=0x1)printf("set-get pipes not consistent."); for(ch=0;ch<127;++ch){ CHECK(setchannel(sk,ch),res,err); CHECK(set_if_up(sk),res,err); sleep(1); CHECK(set_if_down(sk),res,err); CHECK(getrpd(sk,rpd+ch),res,err); } ret: close_rawsocket(sk); return res; err: perror("Error in scan"); goto ret; }
int main(int argc, char **argv){ printf("\nTaylor:my ifconfig cmd complish use ioctl function\n"); switch(argc){ case 1: print_all_interface(); break; case 2: print_interface_info(argv[1]); break; case 3: if(strcmp(argv[2], "up") == 0) set_if_up(argv[1]); else if(strcmp(argv[2], "down") == 0) set_if_down(argv[2]); else set_if_ip(argv[1], argv[2]); break; default: usage(); break; } return 0; }
static int release(char *master_ifname, char *slave_ifname) { struct ifreq ifr; int res = 0; if (!(slave_flags.ifr_flags & IFF_SLAVE)) { fprintf(stderr, "Illegal operation: The specified slave interface " "'%s' is not a slave\n", slave_ifname); return 1; } strncpy(ifr.ifr_name, master_ifname, IFNAMSIZ); strncpy(ifr.ifr_slave, slave_ifname, IFNAMSIZ); if ((ioctl(skfd, SIOCBONDRELEASE, &ifr) < 0) && (ioctl(skfd, BOND_RELEASE_OLD, &ifr) < 0)) { saved_errno = errno; v_print("Master '%s': Error: SIOCBONDRELEASE failed: %s\n", master_ifname, strerror(saved_errno)); return 1; } else if (abi_ver < 1) { /* The driver is using an old ABI, so we'll set the interface * down to avoid any conflicts due to same MAC/IP */ res = set_if_down(slave_ifname, slave_flags.ifr_flags); if (res) { fprintf(stderr, "Slave '%s': Error: bring interface " "down failed\n", slave_ifname); } } /* set to default mtu */ set_slave_mtu(slave_ifname, 1500); return res; }
static int release(char *master_ifname, char *slave_ifname) { struct ifreq ifr; int res = 0; if (!(slave_flags.ifr_flags & IFF_SLAVE)) { fprintf(stderr, "Illegal operation: The specified slave interface " "'%s' is not a slave\n", slave_ifname); return 1; } strncpy(ifr.ifr_name, master_ifname, IFNAMSIZ); strncpy(ifr.ifr_slave, slave_ifname, IFNAMSIZ); if ((ioctl(skfd, SIOCBONDRELEASE, &ifr) < 0) && (ioctl(skfd, BOND_RELEASE_OLD, &ifr) < 0)) { saved_errno = errno; v_print("Master '%s': Error: SIOCBONDRELEASE failed: %s\n", master_ifname, strerror(saved_errno)); return 1; } else if (abi_ver < 1) { res = set_if_down(slave_ifname, slave_flags.ifr_flags); if (res) { fprintf(stderr, "Slave '%s': Error: bring interface " "down failed\n", slave_ifname); } } set_slave_mtu(slave_ifname, 1500); return res; }
static int enslave(char *master_ifname, char *slave_ifname) { struct ifreq ifr; int res = 0; if (slave_flags.ifr_flags & IFF_SLAVE) { fprintf(stderr, "Illegal operation: The specified slave interface " "'%s' is already a slave\n", slave_ifname); return 1; } res = set_if_down(slave_ifname, slave_flags.ifr_flags); if (res) { fprintf(stderr, "Slave '%s': Error: bring interface down failed\n", slave_ifname); return res; } if (abi_ver < 2) { /* Older bonding versions would panic if the slave has no IP * address, so get the IP setting from the master. */ set_if_addr(master_ifname, slave_ifname); } else { res = clear_if_addr(slave_ifname); if (res) { fprintf(stderr, "Slave '%s': Error: clear address failed\n", slave_ifname); return res; } } if (master_mtu.ifr_mtu != slave_mtu.ifr_mtu) { res = set_slave_mtu(slave_ifname, master_mtu.ifr_mtu); if (res) { fprintf(stderr, "Slave '%s': Error: set MTU failed\n", slave_ifname); return res; } } if (hwaddr_set) { /* Master already has an hwaddr * so set it's hwaddr to the slave */ if (abi_ver < 1) { /* The driver is using an old ABI, so * the application sets the slave's * hwaddr */ res = set_slave_hwaddr(slave_ifname, &(master_hwaddr.ifr_hwaddr)); if (res) { fprintf(stderr, "Slave '%s': Error: set hw address " "failed\n", slave_ifname); goto undo_mtu; } /* For old ABI the application needs to bring the * slave back up */ res = set_if_up(slave_ifname, slave_flags.ifr_flags); if (res) { fprintf(stderr, "Slave '%s': Error: bring interface " "down failed\n", slave_ifname); goto undo_slave_mac; } } /* The driver is using a new ABI, * so the driver takes care of setting * the slave's hwaddr and bringing * it up again */ } else { /* No hwaddr for master yet, so * set the slave's hwaddr to it */ if (abi_ver < 1) { /* For old ABI, the master needs to be * down before setting its hwaddr */ res = set_if_down(master_ifname, master_flags.ifr_flags); if (res) { fprintf(stderr, "Master '%s': Error: bring interface " "down failed\n", master_ifname); goto undo_mtu; } } res = set_master_hwaddr(master_ifname, &(slave_hwaddr.ifr_hwaddr)); if (res) { fprintf(stderr, "Master '%s': Error: set hw address " "failed\n", master_ifname); goto undo_mtu; } if (abi_ver < 1) { /* For old ABI, bring the master * back up */ res = set_if_up(master_ifname, master_flags.ifr_flags); if (res) { fprintf(stderr, "Master '%s': Error: bring interface " "up failed\n", master_ifname); goto undo_master_mac; } } hwaddr_set = 1; } /* Do the real thing */ strncpy(ifr.ifr_name, master_ifname, IFNAMSIZ); strncpy(ifr.ifr_slave, slave_ifname, IFNAMSIZ); if ((ioctl(skfd, SIOCBONDENSLAVE, &ifr) < 0) && (ioctl(skfd, BOND_ENSLAVE_OLD, &ifr) < 0)) { saved_errno = errno; v_print("Master '%s': Error: SIOCBONDENSLAVE failed: %s\n", master_ifname, strerror(saved_errno)); res = 1; } if (res) { goto undo_master_mac; } return 0; /* rollback (best effort) */ undo_master_mac: set_master_hwaddr(master_ifname, &(master_hwaddr.ifr_hwaddr)); hwaddr_set = 0; goto undo_mtu; undo_slave_mac: set_slave_hwaddr(slave_ifname, &(slave_hwaddr.ifr_hwaddr)); undo_mtu: set_slave_mtu(slave_ifname, slave_mtu.ifr_mtu); return res; }
static int enslave(char *master_ifname, char *slave_ifname) { struct ifreq ifr; int res = 0; if (slave_flags.ifr_flags & IFF_SLAVE) { fprintf(stderr, "Illegal operation: The specified slave interface " "'%s' is already a slave\n", slave_ifname); return 1; } res = set_if_down(slave_ifname, slave_flags.ifr_flags); if (res) { fprintf(stderr, "Slave '%s': Error: bring interface down failed\n", slave_ifname); return res; } if (abi_ver < 2) { /* */ set_if_addr(master_ifname, slave_ifname); } else { res = clear_if_addr(slave_ifname); if (res) { fprintf(stderr, "Slave '%s': Error: clear address failed\n", slave_ifname); return res; } } if (master_mtu.ifr_mtu != slave_mtu.ifr_mtu) { res = set_slave_mtu(slave_ifname, master_mtu.ifr_mtu); if (res) { fprintf(stderr, "Slave '%s': Error: set MTU failed\n", slave_ifname); return res; } } if (hwaddr_set) { /* */ if (abi_ver < 1) { /* */ res = set_slave_hwaddr(slave_ifname, &(master_hwaddr.ifr_hwaddr)); if (res) { fprintf(stderr, "Slave '%s': Error: set hw address " "failed\n", slave_ifname); goto undo_mtu; } /* */ res = set_if_up(slave_ifname, slave_flags.ifr_flags); if (res) { fprintf(stderr, "Slave '%s': Error: bring interface " "down failed\n", slave_ifname); goto undo_slave_mac; } } /* */ } else { /* */ if (abi_ver < 1) { /* */ res = set_if_down(master_ifname, master_flags.ifr_flags); if (res) { fprintf(stderr, "Master '%s': Error: bring interface " "down failed\n", master_ifname); goto undo_mtu; } } res = set_master_hwaddr(master_ifname, &(slave_hwaddr.ifr_hwaddr)); if (res) { fprintf(stderr, "Master '%s': Error: set hw address " "failed\n", master_ifname); goto undo_mtu; } if (abi_ver < 1) { /* */ res = set_if_up(master_ifname, master_flags.ifr_flags); if (res) { fprintf(stderr, "Master '%s': Error: bring interface " "up failed\n", master_ifname); goto undo_master_mac; } } hwaddr_set = 1; } /* */ strncpy(ifr.ifr_name, master_ifname, IFNAMSIZ); strncpy(ifr.ifr_slave, slave_ifname, IFNAMSIZ); if ((ioctl(skfd, SIOCBONDENSLAVE, &ifr) < 0) && (ioctl(skfd, BOND_ENSLAVE_OLD, &ifr) < 0)) { saved_errno = errno; v_print("Master '%s': Error: SIOCBONDENSLAVE failed: %s\n", master_ifname, strerror(saved_errno)); res = 1; } if (res) { goto undo_master_mac; } return 0; /* */ undo_master_mac: set_master_hwaddr(master_ifname, &(master_hwaddr.ifr_hwaddr)); hwaddr_set = 0; goto undo_mtu; undo_slave_mac: set_slave_hwaddr(slave_ifname, &(slave_hwaddr.ifr_hwaddr)); undo_mtu: set_slave_mtu(slave_ifname, slave_mtu.ifr_mtu); return res; }