2 * Acess2 IFCONFIG command
11 #define IPSTACK_ROOT "/Devices/ip"
14 void PrintUsage(char *ProgName);
15 void PrintHelp(char *ProgName);
16 int GetAddress( char *Address, uint8_t *Addr );
20 * \fn int main(int argc, char *argv[])
23 int main(int argc, char *argv[])
31 for(i = 1; i < argc; i++)
47 char *arg = &argv[i][2];
48 if(strcmp(arg, "help") == 0) {
54 for( j = 1; argv[i][j]; j++ )
72 type = GetAddress(ipStr, addr);
74 fprintf(stderr, "Invalid IP Address\n");
80 fprintf(stderr, "WARNING: \"All interfaces\" is currently uniplemented");
85 int fd = open(iface, OPENFLAG_EXEC);
88 fprintf(stderr, "ERROR: Unable to open interface '%s'\n", iface);
92 call = ioctl(fd, 3, "ping");
94 fprintf(stderr, "ERROR: '%s' does not have a 'ping' call\n", iface);
97 ping = ioctl(fd, call, addr);
98 printf("ping = %i\n");
106 void PrintUsage(char *ProgName)
108 fprintf(stderr, "Usage: %s <address> [<interface>]\n", ProgName);
111 void PrintHelp(char *ProgName)
113 PrintUsage(ProgName);
114 fprintf(stderr, " -h\tPrint this message\n");
118 * \brief Read an IPv4 Address
120 int GetAddress4(char *String, uint8_t *Addr)
126 for( j = 0; String[i] && j < 4; j ++ )
129 for( ; String[i] && String[i] != '.'; i++ )
131 if('0' > String[i] || String[i] > '9') {
132 printf("0<c<9 expected, '%c' found\n", String[i]);
135 val = val*10 + String[i] - '0';
138 printf("val > 255 (%i)\n", val);
147 printf("4 parts expected, %i found\n", j);
150 if(String[i] != '\0') {
151 printf("EOS != '\\0', '%c'\n", String[i]);
158 * \brief Read an IPv6 Address
160 int GetAddress6(char *String, uint8_t *Addr)
164 int val, split = -1, end;
165 uint16_t hi[8], low[8];
167 for( j = 0; String[i] && j < 8; j ++ )
169 if(String[i] == ':') {
171 printf("Two '::'s\n");
180 for( k = 0; String[i] && String[i] != ':'; i++, k++ )
183 if('0' <= String[i] && String[i] <= '9')
184 val += String[i] - '0';
185 else if('A' <= String[i] && String[i] <= 'F')
186 val += String[i] - 'A' + 10;
187 else if('a' <= String[i] && String[i] <= 'f')
188 val += String[i] - 'a' + 10;
190 printf("%c unexpected\n", String[i]);
196 printf("val (0x%x) > 0xFFFF\n", val);
205 if( String[i] == ':' ) {
211 for( j = 0; j < split; j ++ )
213 Addr[j*2] = hi[j]>>8;
214 Addr[j*2+1] = hi[j]&0xFF;
216 for( ; j < 8 - (end - split); j++ )
222 for( ; j < 8; j ++, k++)
224 Addr[j*2] = hi[k]>>8;
225 Addr[j*2+1] = hi[k]&0xFF;
231 int GetAddress(char *String, uint8_t *Addr)
233 if( GetAddress4(String, Addr) )
236 if( GetAddress6(String, Addr) )