+ memcpy(&nc_new, &sa->nc, sizeof(struct net_conf));
+ if (nc->ip.s_addr != 0)
+ nc_new.ip = nc->ip;
+ if (nc->netmask.s_addr != 0)
+ nc_new.netmask = nc->netmask;
+ if (nc->gw.s_addr != 0)
+ nc_new.gw = nc->gw;
+ nc_new.dhcp = nc->dhcp;
+
+ /* gateway must be in the network range */
+ if ((nc_new.ip.s_addr & nc_new.netmask.s_addr) != (nc_new.gw.s_addr & nc_new.netmask.s_addr))
+ return ERR_INVARG;
+
+ /* no need to send anything if old and new configurations are the same */
+ if (memcmp(&nc_new, &sa->nc, sizeof(struct net_conf)) == 0)
+ return ERR_OK;
+