set_mac_address.c
来自「eCos操作系统源码」· C语言 代码 · 共 173 行
C
173 行
//==========================================================================//// tests/set_mac_address.c//// Set_Mac_Address Utility - this carefully does NOTHING unless you// edit this source file to confirm that you really want to do it.////==========================================================================//####BSDCOPYRIGHTBEGIN####//// -------------------------------------------//// Portions of this software may have been derived from OpenBSD or other sources,// and are covered by the appropriate copyright disclaimers included herein.//// -------------------------------------------////####BSDCOPYRIGHTEND####//==========================================================================//#####DESCRIPTIONBEGIN####//// Author(s): hmt// Contributors: // Date: 2000-05-03// Purpose: // Description: // ////####DESCRIPTIONEND####////==========================================================================#include <pkgconf/system.h>#ifdef CYGBLD_DEVS_ETH_DEVICE_H // Get the device config if it exists#include CYGBLD_DEVS_ETH_DEVICE_H#endif// SET_MAC_ADDRESS test code#include <network.h>#include <netinet/if_ether.h>#define NUMTHREADS 1#define STACK_SIZE (CYGNUM_HAL_STACK_SIZE_TYPICAL + 0x1000)static char thread_stack[NUMTHREADS][STACK_SIZE];static cyg_thread thread_data[NUMTHREADS];static cyg_handle_t thread_handle[NUMTHREADS];extern voidcyg_test_exit(void);voidpexit(char *s){ perror(s); cyg_test_exit();}// ------------------------------------------------------------------------// remove NT to make this utility be useful ;-)#define DONT_SET_ETH0#define DONT_SET_ETH1// These are commented out to make sure you choose a value:#ifdef DO_SET_ETH0//static cyg_uint8 new_eth0_addr[6]={ 0x0,0x90,0x27,0x8c,0x57,0xdd};//static cyg_uint8 new_eth0_addr[6]={ 0x0,0x90,0x27,0x8c,0x57,0xdb};#endif#ifdef DO_SET_ETH1//static cyg_uint8 new_eth1_addr[6]={ 0x0,0x90,0x27,0x8c,0x57,0xde};//static cyg_uint8 new_eth1_addr[6]={ 0x0,0x90,0x27,0x8c,0x57,0xdc};#endif// ------------------------------------------------------------------------intset_mac_address( const char *interface, char *mac_address ){ int s, i; struct ifreq ifr; s = socket(AF_INET, SOCK_DGRAM, 0); if (s < 0) { perror("socket"); return false; } diag_printf( "%s socket is %d:\n", interface, s ); strcpy(ifr.ifr_name, interface); for ( i = 0; i < ETHER_ADDR_LEN; i++ ) ifr.ifr_hwaddr.sa_data[i] = mac_address[i]; diag_printf( "Mac addr %02x:%02x:%02x:%02x:%02x:%02x\n", ifr.ifr_hwaddr.sa_data[0], ifr.ifr_hwaddr.sa_data[1], ifr.ifr_hwaddr.sa_data[2], ifr.ifr_hwaddr.sa_data[3], ifr.ifr_hwaddr.sa_data[4], ifr.ifr_hwaddr.sa_data[5] ); if (ioctl(s, SIOCSIFHWADDR, &ifr)) { perror("SIOCSIFHWADDR"); close( s ); return false; } diag_printf( "%s ioctl(SIOCSIFHWADDR) succeeded\n", interface ); close( s ); return true;}// ------------------------------------------------------------------------voidnet_test(cyg_addrword_t param){ int results = 0; diag_printf("Start set_mac_address\n");#ifdef CYGHWR_NET_DRIVER_ETH0#ifdef DO_SET_ETH0 diag_printf("Setting MAC of eth0 to %02x:%02x:%02x:%02x:%02x:%02x\n", new_eth0_addr[0],new_eth0_addr[1], new_eth0_addr[2],new_eth0_addr[3], new_eth0_addr[4],new_eth0_addr[5] ); results += set_mac_address( "eth0", new_eth0_addr );#endif#endif#ifdef CYGHWR_NET_DRIVER_ETH1#ifdef DO_SET_ETH1 diag_printf("Setting MAC of eth1 to %02x:%02x:%02x:%02x:%02x:%02x\n", new_eth1_addr[0],new_eth1_addr[1], new_eth1_addr[2],new_eth1_addr[3], new_eth1_addr[4],new_eth1_addr[5] ); results += set_mac_address( "eth1", new_eth1_addr );#endif#endif if ( 0 == results ) diag_printf( "**** Did not set any MAC addresses ****\n" ); diag_printf("Init Network Interfaces\n"); init_all_network_interfaces(); diag_printf("After init.\n"); cyg_test_exit();}// ------------------------------------------------------------------------voidcyg_start(void){ // Create a main thread, so we can run the scheduler and have time 'pass' cyg_thread_create(10, // Priority - just a number net_test, // entry 0, // entry parameter "Network test", // Name &thread_stack[0][0], // Stack STACK_SIZE, // Size &thread_handle[0], // Handle &thread_data[0] // Thread data structure ); cyg_thread_resume(thread_handle[0]); // Start it cyg_scheduler_start();}// EOF set_mac_address.c
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?