diff --git a/fsutils/ipcfg/ipcfg.h b/fsutils/ipcfg/ipcfg.h index a2c1a63c0..f0bb89652 100644 --- a/fsutils/ipcfg/ipcfg.h +++ b/fsutils/ipcfg/ipcfg.h @@ -37,9 +37,10 @@ * Pre-processor Definitions ****************************************************************************/ -#define MAX_LINESIZE 80 -#define MAX_IPv4PROTO IPv4PROTO_FALLBACK -#define MAX_IPv6PROTO IPv6PROTO_FALLBACK +#define IPCFG_VERSION 1 /* Increment this if the data/structure changes */ +#define MAX_LINESIZE 80 +#define MAX_IPv4PROTO IPv4PROTO_FALLBACK +#define MAX_IPv6PROTO IPv6PROTO_FALLBACK /**************************************************************************** * Public Types @@ -49,7 +50,8 @@ struct ipcfg_header_s { - uint8_t next; /* Offset to the next IP configuration record */ + uint8_t next; /* Offset to the next IP configuration record */ + uint8_t version; /* For binary compatibility */ sa_family_t type; /* Either AF_INET or AF_INET6 */ }; diff --git a/fsutils/ipcfg/ipcfg_binary.c b/fsutils/ipcfg/ipcfg_binary.c index 9af338624..e2d841d43 100644 --- a/fsutils/ipcfg/ipcfg_binary.c +++ b/fsutils/ipcfg/ipcfg_binary.c @@ -223,11 +223,12 @@ static int ipcfg_find_binary(int fd, sa_family_t af) return (int)ret; } - else if (hdr.type == af) + else if (hdr.version == IPCFG_VERSION && hdr.type == af) { return OK; } - else if (hdr.type != AF_INET && hdr.type != AF_INET6) + else if (hdr.version != IPCFG_VERSION || + hdr.type != AF_INET && hdr.type != AF_INET6) { return -EINVAL; } @@ -416,8 +417,9 @@ int ipcfg_write_binary_ipv4(FAR const char *path, /* Write the IPv4 file header */ - hdr.next = ipv6 ? sizeof(struct ipv4cfg_s) : 0; - hdr.type = AF_INET; + hdr.next = ipv6 ? sizeof(struct ipv4cfg_s) : 0; + hdr.type = AF_INET; + hdr.version = IPCFG_VERSION; ret = ipcfg_write_binary(fd, &hdr, sizeof(struct ipcfg_header_s)); if (ret < 0) @@ -440,8 +442,9 @@ int ipcfg_write_binary_ipv4(FAR const char *path, { /* Write the IPv6 header */ - hdr.next = 0; - hdr.type = AF_INET6; + hdr.next = 0; + hdr.type = AF_INET6; + hdr.version = IPCFG_VERSION; ret = ipcfg_write_binary(fd, &hdr, sizeof(struct ipcfg_header_s)); if (ret >= 0) @@ -523,8 +526,9 @@ int ipcfg_write_binary_ipv6(FAR const char *path, { /* Write the IPv4 header */ - hdr.next = sizeof(struct ipv4cfg_s); - hdr.type = AF_INET; + hdr.next = sizeof(struct ipv4cfg_s); + hdr.type = AF_INET; + hdr.version = IPCFG_VERSION; ret = ipcfg_write_binary(fd, &hdr, sizeof(struct ipcfg_header_s)); if (ret < 0) @@ -546,8 +550,9 @@ int ipcfg_write_binary_ipv6(FAR const char *path, /* Write the IPv6 file header */ - hdr.next = 0; - hdr.type = AF_INET6; + hdr.next = 0; + hdr.type = AF_INET6; + hdr.version = IPCFG_VERSION; ret = ipcfg_write_binary(fd, &hdr, sizeof(struct ipcfg_header_s)); if (ret >= 0)