MCPcopy Create free account
hub / github.com/EIPStackGroup/OpENer / ConfigureNetworkInterface

Function ConfigureNetworkInterface

source/src/ports/POSIX/networkconfig.c:51–135  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

49}
50
51EipStatus ConfigureNetworkInterface(const char *const network_interface) {
52
53 struct ifreq ifr;
54 size_t if_name_len = strlen(network_interface);
55 if(if_name_len < sizeof(ifr.ifr_name) ) {
56 memcpy(ifr.ifr_name, network_interface, if_name_len);
57 ifr.ifr_name[if_name_len] = 0;
58 }
59 else{
60 OPENER_TRACE_INFO("interface name is too long\n");
61 }
62
63 int fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
64 int ipaddr = 0;
65 int netaddr = 0;
66 if(ioctl(fd, SIOCGIFADDR, &ifr) == 0) {
67 ipaddr = ( (struct sockaddr_in *) &ifr.ifr_addr )->sin_addr.s_addr;
68 } else {
69 return kEipStatusError;
70 }
71
72 if(ioctl(fd, SIOCGIFNETMASK, &ifr) == 0) {
73 netaddr = ( (struct sockaddr_in *) &ifr.ifr_netmask )->sin_addr.s_addr;
74 } else {
75 return kEipStatusError;
76 }
77
78 interface_configuration_.ip_address = ipaddr;
79 interface_configuration_.network_mask = netaddr;
80
81 char route_location[] = "/proc/net/route";
82
83 FILE *file_handle = fopen(route_location, "r");
84 char file_buffer[100] = { 0 };
85 char *gateway_string = NULL;
86 CipUdint gateway = 0;
87
88 if(file_handle) {
89 char *needle_start = NULL;
90 while(NULL ==
91 (needle_start =
92 strstr(file_buffer,
93 network_interface) ) &&
94 fgets(file_buffer, sizeof(file_buffer), file_handle) ) {
95 }
96
97 if(NULL != needle_start) {
98 char *strtok_save = NULL;
99 strtok_r(needle_start, " \t", &strtok_save);
100 strtok_r(needle_start, " \t", &strtok_save);
101 gateway_string = strtok_r(needle_start, "\t", &strtok_save);
102 }
103 else{
104 OPENER_TRACE_ERR("network interface: %s not found", network_interface);
105 fclose(file_handle);
106 exit(1);
107 }
108 }

Callers 1

mainFunction · 0.70

Calls 1

CloseSocketFunction · 0.85

Tested by

no test coverage detected