mirror of
https://github.com/logicog/RTLPlayground.git
synced 2026-08-30 14:52:51 +08:00
Change parse_ip()
This commit is contained in:
+35
-23
@@ -283,33 +283,43 @@ __bit cmd_is_space(uint8_t idx) {
|
|||||||
return cmd_buffer[idx] == ' ';
|
return cmd_buffer[idx] == ' ';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// returns 0 when on parser error or invalid value or no space.
|
||||||
int8_t parse_ip(uint8_t idx)
|
// return non-zero number of bytes consumed including the space.
|
||||||
|
// Stops at a space or NULL.
|
||||||
|
uint8_t parse_ip(uint8_t idx)
|
||||||
{
|
{
|
||||||
uint8_t b = 0;
|
uint8_t b = 0;
|
||||||
uint8_t ret;
|
uint8_t ret;
|
||||||
|
uint8_t idx_start = idx;
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
ret = atoi_byte(idx);
|
ret = atoi_byte(idx);
|
||||||
if (ret == 0) {
|
if (ret == 0)
|
||||||
goto err;
|
goto err;
|
||||||
}
|
|
||||||
idx += ret;
|
idx += ret;
|
||||||
ip[b++] = atoi_results_u8;
|
ip[b++] = atoi_results_u8;
|
||||||
|
|
||||||
|
ret = cmd_buffer[idx];
|
||||||
if (b == 4) {
|
if (b == 4) {
|
||||||
|
if (ret == ' ') {
|
||||||
|
idx++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (ret == '\0')
|
||||||
if (cmd_buffer[idx++] != '.') {
|
break;
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
idx++;
|
||||||
|
|
||||||
|
if (ret != '.')
|
||||||
|
goto err;
|
||||||
}
|
}
|
||||||
return 0;
|
return idx - idx_start;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
print_string("Error in IP format\n");
|
print_string("Error in IP format\n");
|
||||||
return -1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1388,7 +1398,7 @@ void parse_syslog(void)
|
|||||||
itoa(syslog_state.server_ip[0]); write_char('.'); itoa(syslog_state.server_ip[1]); write_char('.');
|
itoa(syslog_state.server_ip[0]); write_char('.'); itoa(syslog_state.server_ip[1]); write_char('.');
|
||||||
itoa(syslog_state.server_ip[2]); write_char('.'); itoa(syslog_state.server_ip[3]);
|
itoa(syslog_state.server_ip[2]); write_char('.'); itoa(syslog_state.server_ip[3]);
|
||||||
return;
|
return;
|
||||||
} else if (!parse_ip(cmd_words_b[2])) {
|
} else if (parse_ip(cmd_words_b[2]) != 0) {
|
||||||
uint8_t was_enabled = syslog_state.enabled;
|
uint8_t was_enabled = syslog_state.enabled;
|
||||||
if (was_enabled)
|
if (was_enabled)
|
||||||
syslog_stop();
|
syslog_stop();
|
||||||
@@ -1568,46 +1578,48 @@ void cmd_parser(void) __banked
|
|||||||
} else {
|
} else {
|
||||||
if (dhcp_state.state)
|
if (dhcp_state.state)
|
||||||
dhcp_stop();
|
dhcp_stop();
|
||||||
if (!parse_ip(cmd_words_b[1])) {
|
if (parse_ip(cmd_words_b[1]) != 0) {
|
||||||
uip_ipaddr(&uip_hostaddr, ip[0], ip[1], ip[2], ip[3]);
|
uip_ipaddr(&uip_hostaddr, ip[0], ip[1], ip[2], ip[3]);
|
||||||
print_string("Setting ip: ");
|
print_string("Setting ip: ");
|
||||||
itoa(ip[0]); write_char('.'); itoa(ip[1]); write_char('.');
|
itoa(ip[0]); write_char('.'); itoa(ip[1]); write_char('.');
|
||||||
itoa(ip[2]); write_char('.'); itoa(ip[3]); write_char('\n');
|
itoa(ip[2]); write_char('.'); itoa(ip[3]); write_char('\n');
|
||||||
} else {
|
} else {
|
||||||
print_string("Invalid IP address\n");
|
print_string("Invalid IP address\n" \
|
||||||
print_string("Error: ip [<ip-address>|dhcp]\n");
|
"Error: ip [<ip-address>|dhcp]\n" \
|
||||||
print_string(" The dhcp option enables the dhcp client, calling ip without options prints the current IP\n");
|
" The dhcp option enables the dhcp client, calling ip without options prints the current IP\n" \
|
||||||
print_string(" Calling with a valid IP address will stop any ongoing dhcp client and set the IP address\n");
|
" Calling with a valid IP address will stop any ongoing dhcp client and set the IP address\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (cmd_compare(0, "gw")) {
|
} else if (cmd_compare(0, "gw")) {
|
||||||
if (cmd_words_len == 1) {
|
if (cmd_words_len == 1) {
|
||||||
print_string("Current gw: ");
|
print_string("Current gw: ");
|
||||||
itoa(uip_draddr[0]); write_char('.'); itoa(uip_draddr[0] >> 8); write_char('.');
|
itoa(uip_draddr[0]); write_char('.'); itoa(uip_draddr[0] >> 8); write_char('.');
|
||||||
itoa(uip_draddr[1]); write_char('.'); itoa(uip_draddr[1] >> 8);
|
itoa(uip_draddr[1]); write_char('.'); itoa(uip_draddr[1] >> 8); write_char('\n');
|
||||||
} else {
|
} else {
|
||||||
if (!parse_ip(cmd_words_b[1]))
|
if (parse_ip(cmd_words_b[1]) != 0) {
|
||||||
uip_ipaddr(&uip_draddr, ip[0], ip[1], ip[2], ip[3]);
|
uip_ipaddr(&uip_draddr, ip[0], ip[1], ip[2], ip[3]);
|
||||||
else
|
|
||||||
print_string("Invalid IP address\n");
|
|
||||||
print_string("Setting gw: ");
|
print_string("Setting gw: ");
|
||||||
itoa(ip[0]); write_char('.'); itoa(ip[1]); write_char('.');
|
itoa(ip[0]); write_char('.'); itoa(ip[1]); write_char('.');
|
||||||
itoa(ip[2]); write_char('.'); itoa(ip[3]);
|
itoa(ip[2]); write_char('.'); itoa(ip[3]); write_char('\n');
|
||||||
|
} else {
|
||||||
|
print_string("Invalid IP address\n" \
|
||||||
|
"Error: gw <ip-address>\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
write_char('\n');
|
|
||||||
} else if (cmd_compare(0, "netmask")) {
|
} else if (cmd_compare(0, "netmask")) {
|
||||||
if (cmd_words_len == 1) {
|
if (cmd_words_len == 1) {
|
||||||
print_string("Current netmask: ");
|
print_string("Current netmask: ");
|
||||||
itoa(uip_netmask[0]); write_char('.'); itoa(uip_netmask[0] >> 8); write_char('.');
|
itoa(uip_netmask[0]); write_char('.'); itoa(uip_netmask[0] >> 8); write_char('.');
|
||||||
itoa(uip_netmask[1]); write_char('.'); itoa(uip_netmask[1] >> 8);
|
itoa(uip_netmask[1]); write_char('.'); itoa(uip_netmask[1] >> 8);
|
||||||
} else {
|
} else {
|
||||||
if (!parse_ip(cmd_words_b[1]))
|
if (parse_ip(cmd_words_b[1]) != 0) {
|
||||||
uip_ipaddr(&uip_netmask, ip[0], ip[1], ip[2], ip[3]);
|
uip_ipaddr(&uip_netmask, ip[0], ip[1], ip[2], ip[3]);
|
||||||
else
|
|
||||||
print_string("Invalid IP address\n");
|
|
||||||
print_string("Setting netmask: ");
|
print_string("Setting netmask: ");
|
||||||
itoa(ip[0]); write_char('.'); itoa(ip[1]); write_char('.');
|
itoa(ip[0]); write_char('.'); itoa(ip[1]); write_char('.');
|
||||||
itoa(ip[2]); write_char('.'); itoa(ip[3]);
|
itoa(ip[2]); write_char('.'); itoa(ip[3]);
|
||||||
|
} else {
|
||||||
|
print_string("Invalid IP address\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
write_char('\n');
|
write_char('\n');
|
||||||
} else if (cmd_compare(0, "l2")) {
|
} else if (cmd_compare(0, "l2")) {
|
||||||
|
|||||||
Reference in New Issue
Block a user