Exemple #1
0
void
check_nvm(nvm_data_t * nvm_data, int reset)
{
  uint8_t flash = 0;

  if(reset || nvm_data->magic != CETIC_6LBR_NVM_MAGIC
     || nvm_data->version > CETIC_6LBR_NVM_CURRENT_VERSION) {
    //NVM is invalid or we are rollbacking from another version
    //Set all data to default values
    if (!reset) {
      LOG6LBR_ERROR
        ("Invalid NVM magic number or unsupported NVM version, reseting it...\n");
    }
    nvm_reset_version_0(nvm_data);
    flash = 1;
  }
  if (nvm_data->size != sizeof(nvm_data_t)) {
    LOG6LBR_ERROR
      ("Invalid NVM size, reseting it...\n");
    nvm_reset_version_0(nvm_data);
    flash = 1;
  }

  if(flash) {
    nvm_data_write();
  }
}
Exemple #2
0
int
nvm_data_reset(void)
{
  int force_reset = 0;
  LOG6LBR_DEBUG("Opening nvm factory file '%s'\n", sixlbr_config_factory_nvm_file);
  memset(nvm_mem, 0xff, NVM_SIZE);
  int s = open(sixlbr_config_factory_nvm_file, O_RDONLY);
  if(s > 0) {
    if(read(s, nvm_mem, NVM_SIZE) < 0) {
      LOG6LBR_INFO("Could not read factory NVM");
      force_reset = 1;
    }
    close(s);
  } else {
    LOG6LBR_INFO("Could not open factory nvm file\n");
    force_reset = 1;
  }
  memcpy((uint8_t *) & nvm_data, nvm_mem, sizeof(nvm_data));
  nvm_data_write();
  return force_reset;
}
Exemple #3
0
void
store_nvm_config(void)
{
  nvm_data_write();
}
Exemple #4
0
void
check_nvm(nvm_data_t * nvm_data, int reset)
{
  uint8_t flash = 0;
  uip_ipaddr_t loc_fipaddr;
  uip_ip4addr_t loc_fip4addr;

  if(reset || nvm_data->magic != CETIC_6LBR_NVM_MAGIC
     || nvm_data->version > CETIC_6LBR_NVM_CURRENT_VERSION) {
    //NVM is invalid or we are rollbacking from another version
    //Set all data to default values
    if (!reset) {
      LOG6LBR_ERROR
        ("Invalid NVM magic number or unsupported NVM version, reseting it...\n");
    }
    nvm_data->magic = CETIC_6LBR_NVM_MAGIC;
    nvm_data->version = CETIC_6LBR_NVM_VERSION_0;

    CETIC_6LBR_NVM_DEFAULT_ETH_NET_PREFIX(&loc_fipaddr);
    memcpy(&nvm_data->eth_net_prefix, &loc_fipaddr.u8, 16);

    CETIC_6LBR_NVM_DEFAULT_ETH_IP_ADDR(&loc_fipaddr);
    memcpy(&nvm_data->eth_ip_addr, &loc_fipaddr.u8, 16);

    CETIC_6LBR_NVM_DEFAULT_WSN_NET_PREFIX(&loc_fipaddr);
    memcpy(&nvm_data->wsn_net_prefix, &loc_fipaddr.u8, 16);

    CETIC_6LBR_NVM_DEFAULT_WSN_IP_ADDR(&loc_fipaddr);
    memcpy(&nvm_data->wsn_ip_addr, &loc_fipaddr.u8, 16);

    CETIC_6LBR_NVM_DEFAULT_ETH_DFT_ROUTER(&loc_fipaddr);
    memcpy(&nvm_data->eth_dft_router, &loc_fipaddr.u8, 16);

    nvm_data->rpl_version_id = CETIC_6LBR_NVM_DEFAULT_RPL_VERSION_ID;

    nvm_data->mode = CETIC_6LBR_NVM_DEFAULT_MODE;

    nvm_data->channel = CETIC_6LBR_NVM_DEFAULT_CHANNEL;

    flash = 1;
  }
  if ( nvm_data->version < CETIC_6LBR_NVM_VERSION_1)
  {
    if (!reset) {
      LOG6LBR_WARN("Migrate NVM version 0 towards 1\n");
    }
    nvm_data->version = CETIC_6LBR_NVM_VERSION_1;

    nvm_data->global_flags = CETIC_6LBR_NVM_DEFAULT_GLOBAL_FLAGS;

    nvm_data->wsn_net_prefix_len = CETIC_6LBR_NVM_DEFAULT_WSN_NET_PREFIX_LEN;
    nvm_data->eth_net_prefix_len = CETIC_6LBR_NVM_DEFAULT_ETH_NET_PREFIX_LEN;

    nvm_data->ra_flags = CETIC_6LBR_NVM_DEFAULT_RA_FLAGS;
    nvm_data->ra_router_lifetime = CETIC_6LBR_NVM_DEFAULT_RA_ROUTER_LIFETIME;
    nvm_data->ra_max_interval = CETIC_6LBR_NVM_DEFAULT_RA_MAX_INTERVAL;
    nvm_data->ra_min_interval = CETIC_6LBR_NVM_DEFAULT_RA_MIN_INTERVAL;
    nvm_data->ra_min_delay = CETIC_6LBR_NVM_DEFAULT_RA_MIN_DELAY;

    nvm_data->ra_prefix_flags = CETIC_6LBR_NVM_DEFAULT_RA_PREFIX_FLAGS;
    nvm_data->ra_prefix_vtime = CETIC_6LBR_NVM_DEFAULT_RA_PREFIX_VTIME;
    nvm_data->ra_prefix_ptime = CETIC_6LBR_NVM_DEFAULT_RA_PREFIX_PTIME;
    nvm_data->ra_rio_flags = CETIC_6LBR_NVM_DEFAULT_RA_RIO_FLAGS;
    nvm_data->ra_rio_lifetime = CETIC_6LBR_NVM_DEFAULT_RA_RIO_LIFETIME;

    nvm_data->rpl_instance_id = CETIC_6LBR_NVM_DEFAULT_RPL_INSTANCE_ID;
    nvm_data->rpl_preference = CETIC_6LBR_NVM_DEFAULT_RPL_PREFERENCE;
    nvm_data->rpl_dio_intdoubl = CETIC_6LBR_NVM_DEFAULT_RPL_DIO_INT_DOUBLING;
    nvm_data->rpl_dio_intmin = CETIC_6LBR_NVM_DEFAULT_RPL_DIO_MIN_INT;
    nvm_data->rpl_dio_redundancy = CETIC_6LBR_NVM_DEFAULT_RPL_DIO_REDUNDANCY;
    nvm_data->rpl_default_lifetime = CETIC_6LBR_NVM_DEFAULT_RPL_DEFAULT_LIFETIME;
    nvm_data->rpl_min_hoprankinc = CETIC_6LBR_NVM_DEFAULT_RPL_MIN_HOP_RANK_INC;
    nvm_data->rpl_lifetime_unit = CETIC_6LBR_NVM_DEFAULT_RPL_LIFETIME_UNIT;

    flash = 1;
  }
  if ( nvm_data->version < CETIC_6LBR_NVM_VERSION_2)
  {
    if (!reset) {
      LOG6LBR_WARN("Migrate NVM version %d towards %d\n", nvm_data->version, CETIC_6LBR_NVM_VERSION_2);
    }
    nvm_data->version = CETIC_6LBR_NVM_VERSION_2;

    nvm_data->security_layer = CETIC_6LBR_NVM_DEFAULT_SECURITY_LAYER;
    nvm_data->security_level = CETIC_6LBR_NVM_DEFAULT_SECURITY_LEVEL;
    uint8_t key[16] = CETIC_6LBR_NVM_DEFAULT_SECURITY_KEY;
    memcpy(nvm_data->noncoresec_key, key, sizeof(key));

    nvm_data->pan_id = CETIC_6LBR_NVM_DEFAULT_PANID;

    nvm_data->rpl_config = CETIC_6LBR_NVM_DEFAULT_RPL_CONFIG;
    nvm_data->rpl_max_rankinc = CETIC_6LBR_NVM_DEFAULT_RPL_MAX_RANK_INC;
    CETIC_6LBR_NVM_DEFAULT_RPL_DODAG_ID(&loc_fipaddr);
    memcpy(&nvm_data->rpl_dodag_id, &loc_fipaddr.u8, 16);
    nvm_data->eth_ip64_flags = CETIC_6LBR_NVM_DEFAULT_IP64_FLAGS;
    CETIC_6LBR_NVM_DEFAULT_IP64_ADDRESS(&loc_fip4addr);
    memcpy(&nvm_data->eth_ip64_addr, &loc_fip4addr.u8, sizeof(loc_fip4addr));
    CETIC_6LBR_NVM_DEFAULT_IP64_NETMASK(&loc_fip4addr);
    memcpy(&nvm_data->eth_ip64_netmask, &loc_fip4addr.u8, sizeof(loc_fip4addr));
    CETIC_6LBR_NVM_DEFAULT_IP64_GATEWAY(&loc_fip4addr);
    memcpy(&nvm_data->eth_ip64_gateway, &loc_fip4addr.u8, sizeof(loc_fip4addr));

    nvm_data->dns_flags = CETIC_6LBR_NVM_DEFAULT_DNS_FLAGS;
    strcpy((char *)nvm_data->dns_host_name, CETIC_6LBR_NVM_DEFAULT_DNS_HOST_NAME);

    nvm_data->webserver_port = CETIC_6LBR_NVM_DEFAULT_WEBSERVER_PORT;

    nvm_data->mac_layer = CETIC_6LBR_NVM_DEFAULT_MAC_LAYER;

    nvm_data->noncoresec_flags = CETIC_6LBR_NVM_DEFAULT_NONCORESEC_FLAGS;

    uint8_t context[8] = CETIC_6LBR_NVM_DEFAULT_6LOWPAN_CONTEXT_0;
    memcpy(nvm_data->wsn_6lowpan_context_0, context, sizeof(context));

    CETIC_6LBR_NVM_DEFAULT_DNS_SERVER(&loc_fipaddr);
    memcpy(&nvm_data->dns_server, &loc_fipaddr.u8, 16);

    nvm_data->log_level = CETIC_6LBR_NVM_DEFAULT_LOG_LEVEL;
    nvm_data->log_services = CETIC_6LBR_NVM_DEFAULT_LOG_SERVICES;

    flash = 1;
  }

  if(flash) {
    nvm_data_write();
  }
}