Beispiel #1
0
/**
*** ParseOptions()
**/
void ParseOptions(button_info *ub)
{
    char *s;
    char *items[]= {"iconpath","pixmappath",NULL,NULL};

    items[2]=mymalloc(strlen(MyName)+2);
    sprintf(items[2],"*%s",MyName);

    GetConfigLine(fd,&s);
    while(s && s[0])
    {
        switch(MatchSeveralLines(s,items,&s))
        {
        case -1:
            break;
        case 0:
            CopyString(&iconPath,s);
            break;
        case 1:
            CopyString(&pixmapPath,s);
            break;
        case 2:
            if(s && s[0] && !config_file)
                ParseConfigLine(&ub,s);
        }
        GetConfigLine(fd,&s);
    }

    if(config_file)
        ParseConfigFile(ub);

    return;
}
Beispiel #2
0
/**
*** ParseConfigFile()
*** Parses optional separate configuration file for FvwmButtons
**/
void ParseConfigFile(button_info *ub)
{
    char s[1024],*t;
    FILE *f=fopen(config_file,"r");
    int l;
    if(!f)
    {
        fprintf(stderr,"%s: Couldn't open config file %s\n",MyName,config_file);
        return;
    }

    while(fgets(s,1023,f))
    {
        /* Got to do some preprocessing here... Line continuation: */
        while((l=strlen(s))<sizeof(s) && s[l-1]=='\n' && s[l-2]=='\\')
            fgets(s+l-2,sizeof(s)-l,f);
        /* And comments: */
        t=s;
        while(*t)
        {
            if(*t=='#' && (t==s || *(t-1)!='\\'))
            {
                *t=0;
                break;
            }
            t++;
        }
        t=s;
        trimleft(t);
        if(*t)ParseConfigLine(&ub,t);
    }

    fclose(f);
}
Beispiel #3
0
/**
*** ParseOptions()
**/
void ParseConfiguration(button_info *ub)
{
	char *s;
	char *items[] =
	{
		NULL, /* filled out below */
		"imagepath",
		"colorset",
		XINERAMA_CONFIG_STRING,
		NULL
	};

	items[0] = mymalloc(strlen(MyName) + 2);
	sprintf(items[0], "*%s", MyName);

	/* send config lines with MyName */
	InitGetConfigLine(fd, items[0]);
	GetConfigLine(fd, &s);
	while (s && s[0])
	{
		char *rest;
		switch (GetTokenIndex(s,items,-1,&rest))
		{
		case -1:
			break;
		case 0:
			if (rest && rest[0] && !config_file)
			{
				ParseConfigLine(&ub, rest);
			}
			break;
		case 1:
			if (imagePath)
			{
				free(imagePath);
			}
			CopyString(&imagePath, rest);
			break;
		case 2:
			/* store colorset sent by fvwm */
			LoadColorset(rest);
			break;
		case 3:
			/* Xinerama state */
			FScreenConfigureModule(rest);
			break;
		}
		GetConfigLine(fd,&s);
	}

	if (config_file)
	{
		ParseConfigFile(ub);
	}

	free(items[0]);
	return;
}
Beispiel #4
0
/*
  ProcessMessage - Process the message coming from fvwm
*/
void ProcessMessage(unsigned long type, unsigned long *body)
{
	char *tline;
	int change = 0;
	static Bool is_initial = True;

	switch (type)
	{
	case M_CONFIG_INFO:
		tline = (char*)&(body[3]);
		ExecuteMatchingCommands(ParseConfigLine(tline), EXEC_ALWAYS);
		break;

	case M_NEW_DESK:
		if (is_initial)
		{
			change = EXEC_ALWAYS;
			is_initial = False;
		}
		else if (current_desk != body[0])
		{
			current_desk = body[0];
			change |= EXEC_CHANGED_DESK;
		}
		ExecuteMatchingCommands(-1, change);
		break;

	case M_NEW_PAGE:
		if (is_initial)
		{
			change = EXEC_ALWAYS;
			is_initial = False;
		}
		if (current_desk != body[2])
		{
			current_desk = body[2];
			change |= EXEC_CHANGED_DESK;
		}
		if (current_x != body[0] / MyDisplayWidth ||
		    current_y != body[1] / MyDisplayHeight)
		{
			current_x = body[0] / MyDisplayWidth;
			current_y = body[1] / MyDisplayHeight;
			change |= EXEC_CHANGED_PAGE;
		}
		ExecuteMatchingCommands(-1, change);
		break;

	}
}
Beispiel #5
0
/**
*** ParseConfigFile()
*** Parses optional separate configuration file for FvwmButtons
**/
static void ParseConfigFile(button_info *ub)
{
	char s[1024], *t;
	FILE *f = fopen(config_file, "r");
	int l;
	if (!f)
	{
		fprintf(stderr,
			"%s: Couldn't open config file %s\n", MyName,
			config_file);
		return;
	}

	while (fgets(s, 1023, f))
	{
		/* Allow for line continuation: */
		while ((l = strlen(s)) < sizeof(s)
			&& l >= 2 && s[l - 1] == '\n' && s[l - 2] == '\\')
		{
			char *p;

			p = fgets(s + l - 2, sizeof(s) - l, f);
			(void)p;
		}

		/* And comments: */
		t = s;
		while (*t)
		{
			if (*t == '#' && (t == s || *(t - 1) != '\\'))
			{
				*t = 0;
				break;
			}
			t++;
		}
		t = s;
		t = trimleft(t);
		if (*t)
		{
			ParseConfigLine(&ub, t);
		}
	}

	fclose(f);
}
Beispiel #6
0
/*
  ParseConfig - Parse the configuration file fvwm to us to use
*/
void ParseConfig(void)
{
	char *line_start;
	char *tline;

	line_start = safemalloc(strlen(Module) + 2);
	strcpy(line_start, "*");
	strcat(line_start, Module);

	InitGetConfigLine(fvwm_fd, line_start);
	GetConfigLine(fvwm_fd, &tline);

	while(tline != (char *)0)
	{
		ParseConfigLine(tline);
		GetConfigLine(fvwm_fd, &tline);
	}
	free(line_start);
}
Beispiel #7
0
void ParseConfigFile()
	{
	char * parseRes;
	char lineIn[1024];
	FILE * cFile;
	errorMess[0] = 0;
	if (!(cFile = fopen("config.txt", "r")))
		return;
	while (fgets(lineIn, 1023, cFile))
		{
		char *line = lrTrim(lineIn);
		if (strlen(line) && !(!strnicmp(line, "rem", 3) && (line[3] == 0 || line[3] == 32 || line[3] == 9)))	// Filter out rem ...
			if (parseRes = ParseConfigLine(line))
				ConfAddError(parseRes, line);
		}
	fclose(cFile);

	
	}
/*******************************************************************************
 *	translate_option()
 *******************************************************************************
 *
 *  DESCRIPTION:
 *
 *      This function takes a line read in from the config file and parses out
 *   the key/value pairs. It then determines which key has been parsed and sets
 *   the card's configuration based on the value given.
 *
 *  PARAMETERS:
 *
 *      buffer - a buffer containing a line to translate
 *      config - a pointer to the device's private adapter structure
 *
 *  RETURNS:
 *
 *      N/A
 *
 ******************************************************************************/
void translate_option(char *buffer, struct wl_private *lp)
{
	unsigned int value_convert = 0;
	int string_length = 0;
	char *key = NULL;
	char *value = NULL;
	u_char mac_value[ETH_ALEN];
	/*------------------------------------------------------------------------*/

	DBG_FUNC("translate_option");

	if (buffer == NULL || lp == NULL) {
		DBG_ERROR(DbgInfo, "Config file buffer and/or wavelan buffer ptr NULL\n");
		return;
	}

	ParseConfigLine(buffer, &key, &value);

	if (key == NULL || value == NULL)
		return;

	/* Determine which key it is and perform the appropriate action */

	/* Configuration parameters used in all scenarios */
#if DBG
	/* handle DebugFlag as early as possible so it starts its influence as early
	 * as possible
	 */
	if (strcmp(key, PARM_NAME_DEBUG_FLAG) == 0) {
		if (DebugFlag == ~0) {			/* if DebugFlag is not specified on the command line */
			if (DbgInfo->DebugFlag == 0) {	/* if pc_debug did not set DebugFlag (i.e.pc_debug is
											 * not specified or specified outside the 4-8 range
											 */
				DbgInfo->DebugFlag |= DBG_DEFAULTS;
			}
		} else {
			DbgInfo->DebugFlag = simple_strtoul(value, NULL, 0); /* ;?DebugFlag; */
		}
		DbgInfo->DebugFlag = simple_strtoul(value, NULL, 0); /* ;?Delete ASAP */
	}
#endif /* DBG */
	if (strcmp(key, PARM_NAME_AUTH_KEY_MGMT_SUITE) == 0) {
		DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_AUTH_KEY_MGMT_SUITE, value);

		value_convert = simple_strtoul(value, NULL, 0);
		if ((value_convert >= PARM_MIN_AUTH_KEY_MGMT_SUITE) || (value_convert <= PARM_MAX_AUTH_KEY_MGMT_SUITE))
			lp->AuthKeyMgmtSuite = value_convert;
		else
			DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_AUTH_KEY_MGMT_SUITE);
	} else if (strcmp(key, PARM_NAME_BRSC_2GHZ) == 0) {
		DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_BRSC_2GHZ, value);

		value_convert = simple_strtoul(value, NULL, 0);
		if ((value_convert >= PARM_MIN_BRSC) || (value_convert <= PARM_MAX_BRSC))
			lp->brsc[0] = value_convert;
		else
			DBG_WARNING(DbgInfo, "%s invaid; will be ignored\n", PARM_NAME_BRSC_2GHZ);
	} else if (strcmp(key, PARM_NAME_BRSC_5GHZ) == 0) {
		DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_BRSC_5GHZ, value);

		value_convert = simple_strtoul(value, NULL, 0);
		if ((value_convert >= PARM_MIN_BRSC) || (value_convert <= PARM_MAX_BRSC))
			lp->brsc[1] = value_convert;
		else
			DBG_WARNING(DbgInfo, "%s invaid; will be ignored\n", PARM_NAME_BRSC_5GHZ);
	} else if ((strcmp(key, PARM_NAME_DESIRED_SSID) == 0) || (strcmp(key, PARM_NAME_OWN_SSID) == 0)) {
		DBG_TRACE(DbgInfo, "SSID, value: %s\n", value);

		memset(lp->NetworkName, 0, (PARM_MAX_NAME_LEN + 1));

		/* Make sure the value isn't too long */
		string_length = strlen(value);
		if (string_length > PARM_MAX_NAME_LEN) {
			DBG_WARNING(DbgInfo, "SSID too long; will be truncated\n");
			string_length = PARM_MAX_NAME_LEN;
		}

		memcpy(lp->NetworkName, value, string_length);
	}
#if 0
	else if (strcmp(key, PARM_NAME_DOWNLOAD_FIRMWARE) == 0) {
		DBG_TRACE(DbgInfo, "DOWNLOAD_FIRMWARE, value: %s\n", value);
		memset(lp->fw_image_filename, 0, (MAX_LINE_SIZE + 1));
		/* Make sure the value isn't too long */
		string_length = strlen(value);
		if (string_length > MAX_LINE_SIZE)
			DBG_WARNING(DbgInfo, "F/W image file name too long; will be ignored\n");
		else
			memcpy(lp->fw_image_filename, value, string_length);
	}
#endif
	else if (strcmp(key, PARM_NAME_ENABLE_ENCRYPTION) == 0) {
		DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_ENABLE_ENCRYPTION, value);

		value_convert = simple_strtoul(value, NULL, 0);
		if ((value_convert >= PARM_MIN_ENABLE_ENCRYPTION) && (value_convert <= PARM_MAX_ENABLE_ENCRYPTION))
			lp->EnableEncryption = value_convert;
		else
			DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_ENABLE_ENCRYPTION);
	} else if (strcmp(key, PARM_NAME_ENCRYPTION) == 0) {
		DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_ENCRYPTION, value);

		memset(lp->szEncryption, 0, sizeof(lp->szEncryption));

		/* Make sure the value isn't too long */
		string_length = strlen(value);
		if (string_length > sizeof(lp->szEncryption)) {
			DBG_WARNING(DbgInfo, "%s too long; will be truncated\n", PARM_NAME_ENCRYPTION);
			string_length = sizeof(lp->szEncryption);
		}

		memcpy(lp->szEncryption, value, string_length);
	} else if (strcmp(key, PARM_NAME_KEY1) == 0) {
		DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_KEY1, value);

		if (is_valid_key_string(value)) {
			memset(lp->DefaultKeys.key[0].key, 0, MAX_KEY_SIZE);

			key_string2key(value, &lp->DefaultKeys.key[0]);
		} else {
			 DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_KEY1);
		}
	} else if (strcmp(key, PARM_NAME_KEY2) == 0) {
		DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_KEY2, value);

		if (is_valid_key_string(value)) {
			memset(lp->DefaultKeys.key[1].key, 0, MAX_KEY_SIZE);

			key_string2key(value, &lp->DefaultKeys.key[1]);
		} else {
			 DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_KEY2);
		}
	} else if (strcmp(key, PARM_NAME_KEY3) == 0) {
		DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_KEY3, value);

		if (is_valid_key_string(value)) {
			memset(lp->DefaultKeys.key[2].key, 0, MAX_KEY_SIZE);

			key_string2key(value, &lp->DefaultKeys.key[2]);
		} else {
			 DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_KEY3);
		}
	} else if (strcmp(key, PARM_NAME_KEY4) == 0) {
		DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_KEY4, value);

		if (is_valid_key_string(value)) {
			memset(lp->DefaultKeys.key[3].key, 0, MAX_KEY_SIZE);

			key_string2key(value, &lp->DefaultKeys.key[3]);
		} else {
			 DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_KEY4);
		}
	}
	/* New Parameters for WARP */
	else if (strcmp(key, PARM_NAME_LOAD_BALANCING) == 0) {
		DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_LOAD_BALANCING, value);
		lp->loadBalancing = parse_yes_no(value);
	} else if (strcmp(key, PARM_NAME_MEDIUM_DISTRIBUTION) == 0) {
		DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_MEDIUM_DISTRIBUTION, value);
		lp->mediumDistribution = parse_yes_no(value);
	} else if (strcmp(key, PARM_NAME_MICROWAVE_ROBUSTNESS) == 0) {
		DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_MICROWAVE_ROBUSTNESS, value);
		lp->MicrowaveRobustness = parse_yes_no(value);
	} else if (strcmp(key, PARM_NAME_MULTICAST_RATE) == 0) {
		DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_MULTICAST_RATE, value);

		value_convert = simple_strtoul(value, NULL, 0);

		if ((value_convert >= PARM_MIN_MULTICAST_RATE) && (value_convert <= PARM_MAX_MULTICAST_RATE))
			lp->MulticastRate[0] = value_convert;
		else
			DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_MULTICAST_RATE);
	} else if (strcmp(key, PARM_NAME_OWN_CHANNEL) == 0) {
		DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_OWN_CHANNEL, value);

		value_convert = simple_strtoul(value, NULL, 0);
		if (wl_is_a_valid_chan(value_convert)) {
			if (value_convert > 14)
				value_convert = value_convert | 0x100;
			lp->Channel = value_convert;
		} else {
			DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_OWN_CHANNEL);
		}
	} else if (strcmp(key, PARM_NAME_OWN_NAME) == 0) {
		DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_OWN_NAME, value);

		memset(lp->StationName, 0, (PARM_MAX_NAME_LEN + 1));

		/* Make sure the value isn't too long */
		string_length = strlen(value);
		if (string_length > PARM_MAX_NAME_LEN) {
			DBG_WARNING(DbgInfo, "%s too long; will be truncated\n", PARM_NAME_OWN_NAME);
			string_length = PARM_MAX_NAME_LEN;
		}

		memcpy(lp->StationName, value, string_length);
	} else if (strcmp(key, PARM_NAME_RTS_THRESHOLD) == 0) {
		DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD, value);

		value_convert = simple_strtoul(value, NULL, 0);
		if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD))
			lp->RTSThreshold = value_convert;
		else
			DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD);
	} else if (strcmp(key, PARM_NAME_SRSC_2GHZ) == 0) {
		DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_SRSC_2GHZ, value);

		value_convert = simple_strtoul(value, NULL, 0);
		if ((value_convert >= PARM_MIN_SRSC) || (value_convert <= PARM_MAX_SRSC))
			lp->srsc[0] = value_convert;
		else
			DBG_WARNING(DbgInfo, "%s invaid; will be ignored\n", PARM_NAME_SRSC_2GHZ);
	} else if (strcmp(key, PARM_NAME_SRSC_5GHZ) == 0) {
		DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_SRSC_5GHZ, value);

		value_convert = simple_strtoul(value, NULL, 0);
		if ((value_convert >= PARM_MIN_SRSC) || (value_convert <= PARM_MAX_SRSC))
			lp->srsc[1] = value_convert;
		else
			DBG_WARNING(DbgInfo, "%s invaid; will be ignored\n", PARM_NAME_SRSC_5GHZ);
	} else if (strcmp(key, PARM_NAME_SYSTEM_SCALE) == 0) {
		DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_SYSTEM_SCALE, value);

		value_convert = simple_strtoul(value, NULL, 0);
		if ((value_convert >= PARM_MIN_SYSTEM_SCALE) && (value_convert <= PARM_MAX_SYSTEM_SCALE))
			lp->DistanceBetweenAPs = value_convert;
		else
			DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_SYSTEM_SCALE);
	} else if (strcmp(key, PARM_NAME_TX_KEY) == 0) {
		DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_KEY, value);

		value_convert = simple_strtoul(value, NULL, 0);
		if ((value_convert >= PARM_MIN_TX_KEY) && (value_convert <= PARM_MAX_TX_KEY))
			lp->TransmitKeyID = simple_strtoul(value, NULL, 0);
		else
			DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_KEY);
	} else if (strcmp(key, PARM_NAME_TX_RATE) == 0) {
		DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE, value);

		value_convert = simple_strtoul(value, NULL, 0);
		if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE))
			lp->TxRateControl[0] = value_convert;
		else
			DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE);
	} else if (strcmp(key, PARM_NAME_TX_POW_LEVEL) == 0) {
		DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_POW_LEVEL, value);

		value_convert = simple_strtoul(value, NULL, 0);
		if ((value_convert >= PARM_MIN_TX_POW_LEVEL) || (value_convert <= PARM_MAX_TX_POW_LEVEL))
			lp->txPowLevel = value_convert;
		else
			DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_POW_LEVEL);
	}

	/* Need to add? : Country code, Short/Long retry */

	/* Configuration parameters specific to STA mode */
#if 1 /* ;? (HCF_TYPE) & HCF_TYPE_STA */
/* ;?seems reasonable that even an AP-only driver could afford this small additional footprint */
	if (CNV_INT_TO_LITTLE(lp->hcfCtx.IFB_FWIdentity.comp_id) == COMP_ID_FW_STA) {
					/* ;?should we return an error status in AP mode */
		if (strcmp(key, PARM_NAME_PORT_TYPE) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_PORT_TYPE, value);

			value_convert = simple_strtoul(value, NULL, 0);
			if ((value_convert == PARM_MIN_PORT_TYPE) || (value_convert == PARM_MAX_PORT_TYPE))
				lp->PortType = value_convert;
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_PORT_TYPE);
		} else if (strcmp(key, PARM_NAME_PM_ENABLED) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_PM_ENABLED, value);
			value_convert = simple_strtoul(value, NULL, 0);
	/* ;? how about wl_main.c containing
	 * VALID_PARAM(PARM_PM_ENABLED <= WVLAN_PM_STATE_STANDARD ||
	 *					 (PARM_PM_ENABLED & 0x7FFF) <= WVLAN_PM_STATE_STANDARD);
	 */
			if ((value_convert & 0x7FFF) <= PARM_MAX_PM_ENABLED) {
				lp->PMEnabled = value_convert;
			} else {
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_PM_ENABLED);
				/* ;?this is a data entry error, hence not a DBG_WARNING */
			}
		} else if (strcmp(key, PARM_NAME_CREATE_IBSS) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_CREATE_IBSS, value);
			lp->CreateIBSS = parse_yes_no(value);
		} else if (strcmp(key, PARM_NAME_MULTICAST_RX) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_MULTICAST_RX, value);
			lp->MulticastReceive = parse_yes_no(value);
		} else if (strcmp(key, PARM_NAME_MAX_SLEEP) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_MAX_SLEEP, value);

			value_convert = simple_strtoul(value, NULL, 0);
			if ((value_convert >= 0) && (value_convert <= 65535))
				lp->MaxSleepDuration = value_convert;
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_MAX_SLEEP);
		} else if (strcmp(key, PARM_NAME_NETWORK_ADDR) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_NETWORK_ADDR, value);

			if (parse_mac_address(value, mac_value) == ETH_ALEN)
				memcpy(lp->MACAddress, mac_value, ETH_ALEN);
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_NETWORK_ADDR);
		} else if (strcmp(key, PARM_NAME_AUTHENTICATION) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_AUTHENTICATION, value);

			value_convert = simple_strtoul(value, NULL, 0);
			if ((value_convert >= PARM_MIN_AUTHENTICATION) && (value_convert <= PARM_MAX_AUTHENTICATION))
				lp->authentication = value_convert;
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_AUTHENTICATION);
		} else if (strcmp(key, PARM_NAME_OWN_ATIM_WINDOW) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_OWN_ATIM_WINDOW, value);

			value_convert = simple_strtoul(value, NULL, 0);
			if ((value_convert >= PARM_MIN_OWN_ATIM_WINDOW) && (value_convert <= PARM_MAX_OWN_ATIM_WINDOW))
				lp->atimWindow = value_convert;
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_OWN_ATIM_WINDOW);
		} else if (strcmp(key, PARM_NAME_PM_HOLDOVER_DURATION) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_PM_HOLDOVER_DURATION, value);

			value_convert = simple_strtoul(value, NULL, 0);
			if ((value_convert >= PARM_MIN_PM_HOLDOVER_DURATION) && (value_convert <= PARM_MAX_PM_HOLDOVER_DURATION))
				lp->holdoverDuration = value_convert;
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_PM_HOLDOVER_DURATION);
		} else if (strcmp(key, PARM_NAME_PROMISCUOUS_MODE) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_PROMISCUOUS_MODE, value);
			lp->promiscuousMode = parse_yes_no(value);
		} else if (strcmp(key, PARM_NAME_CONNECTION_CONTROL) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_CONNECTION_CONTROL, value);

			value_convert = simple_strtoul(value, NULL, 0);
			if ((value_convert >= PARM_MIN_CONNECTION_CONTROL) && (value_convert <= PARM_MAX_CONNECTION_CONTROL))
				lp->connectionControl = value_convert;
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_CONNECTION_CONTROL);
		}

		/* Need to add? : Probe Data Rate */
	}
#endif  /* (HCF_TYPE) & HCF_TYPE_STA */

	/* Configuration parameters specific to AP mode */
#if 1 /* ;? (HCF_TYPE) & HCF_TYPE_AP */
		/* ;?should we restore this to allow smaller memory footprint */
	if (CNV_INT_TO_LITTLE(lp->hcfCtx.IFB_FWIdentity.comp_id) == COMP_ID_FW_AP) {
		if (strcmp(key, PARM_NAME_OWN_DTIM_PERIOD) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_OWN_DTIM_PERIOD, value);

			value_convert = simple_strtoul(value, NULL, 0);
			if (value_convert >= PARM_MIN_OWN_DTIM_PERIOD)
				lp->DTIMPeriod = value_convert;
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_OWN_DTIM_PERIOD);
		} else if (strcmp(key, PARM_NAME_REJECT_ANY) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_REJECT_ANY, value);
			lp->RejectAny = parse_yes_no(value);
		} else if (strcmp(key, PARM_NAME_EXCLUDE_UNENCRYPTED) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_EXCLUDE_UNENCRYPTED, value);
			lp->ExcludeUnencrypted = parse_yes_no(value);
		} else if (strcmp(key, PARM_NAME_MULTICAST_PM_BUFFERING) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_MULTICAST_PM_BUFFERING, value);
			lp->ExcludeUnencrypted = parse_yes_no(value);
		} else if (strcmp(key, PARM_NAME_INTRA_BSS_RELAY) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_INTRA_BSS_RELAY, value);
			lp->ExcludeUnencrypted = parse_yes_no(value);
		} else if (strcmp(key, PARM_NAME_OWN_BEACON_INTERVAL) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_OWN_BEACON_INTERVAL, value);

			value_convert = simple_strtoul(value, NULL, 0);
			if (value_convert >= PARM_MIN_OWN_BEACON_INTERVAL)
				lp->ownBeaconInterval = value_convert;
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_OWN_BEACON_INTERVAL);
		} else if (strcmp(key, PARM_NAME_COEXISTENCE) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_COEXISTENCE, value);

			value_convert = simple_strtoul(value, NULL, 0);
			if (value_convert >= PARM_MIN_COEXISTENCE)
				lp->coexistence = value_convert;
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_COEXISTENCE);
		}

#ifdef USE_WDS
		else if (strcmp(key, PARM_NAME_RTS_THRESHOLD1) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD1, value);

			value_convert = simple_strtoul(value, NULL, 0);
			if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD))
				lp->wds_port[0].rtsThreshold = value_convert;
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD1);
		} else if (strcmp(key, PARM_NAME_RTS_THRESHOLD2) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD2, value);

			value_convert = simple_strtoul(value, NULL, 0);
			if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD))
				lp->wds_port[1].rtsThreshold = value_convert;
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD2);
		} else if (strcmp(key, PARM_NAME_RTS_THRESHOLD3) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD3, value);

			value_convert = simple_strtoul(value, NULL, 0);
			if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD))
				lp->wds_port[2].rtsThreshold = value_convert;
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD3);
		} else if (strcmp(key, PARM_NAME_RTS_THRESHOLD4) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD4, value);

			value_convert = simple_strtoul(value, NULL, 0);
			if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD))
				lp->wds_port[3].rtsThreshold = value_convert;
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD4);
		} else if (strcmp(key, PARM_NAME_RTS_THRESHOLD5) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD5, value);

			value_convert = simple_strtoul(value, NULL, 0);
			if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD))
				lp->wds_port[4].rtsThreshold = value_convert;
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD5);
		} else if (strcmp(key, PARM_NAME_RTS_THRESHOLD6) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD6, value);

			value_convert = simple_strtoul(value, NULL, 0);
			if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD))
				lp->wds_port[5].rtsThreshold = value_convert;
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD6);
		} else if (strcmp(key, PARM_NAME_TX_RATE1) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE1, value);

			value_convert = simple_strtoul(value, NULL, 0);
			if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE))
				lp->wds_port[0].txRateCntl = value_convert;
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE1);
		} else if (strcmp(key, PARM_NAME_TX_RATE2) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE2, value);

			value_convert = simple_strtoul(value, NULL, 0);
			if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE))
				lp->wds_port[1].txRateCntl = value_convert;
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE2);
		} else if (strcmp(key, PARM_NAME_TX_RATE3) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE3, value);

			value_convert = simple_strtoul(value, NULL, 0);
			if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE))
				lp->wds_port[2].txRateCntl = value_convert;
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE3);
		} else if (strcmp(key, PARM_NAME_TX_RATE4) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE4, value);

			value_convert = simple_strtoul(value, NULL, 0);
			if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE))
				lp->wds_port[3].txRateCntl = value_convert;
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE4);
		} else if (strcmp(key, PARM_NAME_TX_RATE5) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE5, value);

			value_convert = simple_strtoul(value, NULL, 0);
			if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE))
				lp->wds_port[4].txRateCntl = value_convert;
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE5);
		} else if (strcmp(key, PARM_NAME_TX_RATE6) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE6, value);

			value_convert = simple_strtoul(value, NULL, 0);
			if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE))
				lp->wds_port[5].txRateCntl = value_convert;
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE6);
		} else if (strcmp(key, PARM_NAME_WDS_ADDRESS1) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_WDS_ADDRESS1, value);

			if (parse_mac_address(value, mac_value) == ETH_ALEN)
				memcpy(lp->wds_port[0].wdsAddress, mac_value, ETH_ALEN);
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS1);
		} else if (strcmp(key, PARM_NAME_WDS_ADDRESS2) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_WDS_ADDRESS2, value);

			if (parse_mac_address(value, mac_value) == ETH_ALEN)
				memcpy(lp->wds_port[1].wdsAddress, mac_value, ETH_ALEN);
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS2);
		} else if (strcmp(key, PARM_NAME_WDS_ADDRESS3) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_WDS_ADDRESS3, value);

			if (parse_mac_address(value, mac_value) == ETH_ALEN)
				memcpy(lp->wds_port[2].wdsAddress, mac_value, ETH_ALEN);
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS3);
		} else if (strcmp(key, PARM_NAME_WDS_ADDRESS4) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_WDS_ADDRESS4, value);

			if (parse_mac_address(value, mac_value) == ETH_ALEN)
				memcpy(lp->wds_port[3].wdsAddress, mac_value, ETH_ALEN);
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS4);
		} else if (strcmp(key, PARM_NAME_WDS_ADDRESS5) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_WDS_ADDRESS5, value);

			if (parse_mac_address(value, mac_value) == ETH_ALEN)
				memcpy(lp->wds_port[4].wdsAddress, mac_value, ETH_ALEN);
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS5);
		} else if (strcmp(key, PARM_NAME_WDS_ADDRESS6) == 0) {
			DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_WDS_ADDRESS6, value);

			if (parse_mac_address(value, mac_value) == ETH_ALEN)
				memcpy(lp->wds_port[5].wdsAddress, mac_value, ETH_ALEN);
			else
				DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS6);
		}
#endif  /* USE_WDS */
	}
#endif  /* (HCF_TYPE) & HCF_TYPE_AP */

	return;
} /* translate_option */