Example #1
0
static int flashnode_fill_isid(struct flashnode_rec *fnode, struct iovec *iov)
{
	struct iscsi_flashnode_param_info *fnode_param;
	struct nlattr *attr;
	int len;
	uint8_t isid[6];

	len = sizeof(struct iscsi_flashnode_param_info) + 6;
	iov->iov_base = iscsi_nla_alloc(ISCSI_FLASHNODE_ISID, len);
	if (!iov->iov_base)
		return 1;

	attr = iov->iov_base;
	iov->iov_len = NLA_ALIGN(attr->nla_len);

	fnode_param = (struct iscsi_flashnode_param_info *)ISCSI_NLA_DATA(attr);
	fnode_param->param = ISCSI_FLASHNODE_ISID;
	fnode_param->len = 6;

	sscanf(fnode->sess.isid, "%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx",
	       &isid[0], &isid[1], &isid[2], &isid[3], &isid[4], &isid[5]);

	memcpy(fnode_param->value, isid, fnode_param->len);
	return 0;
}
Example #2
0
static int chap_fill_param_uint(struct iovec *iov, int param,
				uint32_t param_val, int param_len)
{
	struct iscsi_param_info *param_info;
	struct nlattr *attr;
	int len;
	uint8_t val8 = 0;
	uint16_t val16 = 0;
	uint32_t val32 = 0;
	char *val = NULL;

	len = sizeof(struct iscsi_param_info) + param_len;
	iov->iov_base = iscsi_nla_alloc(param, len);
	if (!iov->iov_base)
		return 1;

	attr = iov->iov_base;
	iov->iov_len = NLA_ALIGN(attr->nla_len);

	param_info = (struct iscsi_param_info *)ISCSI_NLA_DATA(attr);
	param_info->param = param;
	param_info->len = param_len;

	switch (param_len) {
	case 1:
		val8 = (uint8_t)param_val;
		val = (char *)&val8;
		break;

	case 2:
		val16 = (uint16_t)param_val;
		val = (char *)&val16;
		break;

	case 4:
		val32 = (uint32_t)param_val;
		val = (char *)&val32;
		break;

	default:
		goto free;
	}
	memcpy(param_info->value, val, param_len);

	return 0;

free:
	free(iov->iov_base);
	iov->iov_base = NULL;
	iov->iov_len = 0;
	return 1;
}
Example #3
0
static int flashnode_fill_ipv6_addr(struct flashnode_rec *fnode,
				    struct iovec *iov, int param_type)
{
	struct iscsi_flashnode_param_info *fnode_param;
	struct nlattr *attr;
	int len;
	int rc;

	len = sizeof(struct iscsi_flashnode_param_info) + 16;
	iov->iov_base = iscsi_nla_alloc(param_type, len);
	if (!iov->iov_base)
		return 1;

	attr = iov->iov_base;
	iov->iov_len = NLA_ALIGN(attr->nla_len);

	fnode_param = (struct iscsi_flashnode_param_info *)ISCSI_NLA_DATA(attr);
	fnode_param->param = param_type;
	fnode_param->len = 16;

	switch (param_type) {
	case ISCSI_FLASHNODE_IPADDR:
		rc = inet_pton(AF_INET6, (char *)fnode->conn[0].ipaddress,
			       fnode_param->value);
		break;
	case ISCSI_FLASHNODE_REDIRECT_IPADDR:
		rc = inet_pton(AF_INET6, (char *)fnode->conn[0].redirect_ipaddr,
			       fnode_param->value);
		break;
	case ISCSI_FLASHNODE_LINK_LOCAL_IPV6:
		rc = inet_pton(AF_INET6, (char *)fnode->conn[0].link_local_ipv6,
			       fnode_param->value);
		break;
	default:
		goto free;
	}

	if (rc <= 0)
		goto free;

	return 0;

free:
	free(iov->iov_base);
	iov->iov_base = NULL;
	iov->iov_len = 0;
	return 1;
}
Example #4
0
static int flashnode_fill_str(struct flashnode_rec *fnode, struct iovec *iov,
			      int param_type, char *buf, int buflen)
{
	struct iscsi_flashnode_param_info *fnode_param;
	struct nlattr *attr;
	int len;

	len = sizeof(struct iscsi_flashnode_param_info) + buflen;
	iov->iov_base = iscsi_nla_alloc(param_type, len);
	if (!iov->iov_base)
		return 1;

	attr = iov->iov_base;
	iov->iov_len = NLA_ALIGN(attr->nla_len);

	fnode_param = (struct iscsi_flashnode_param_info *)ISCSI_NLA_DATA(attr);
	fnode_param->param = param_type;
	fnode_param->len = buflen;
	memcpy(fnode_param->value, buf, fnode_param->len);
	return 0;
}
Example #5
0
static int flashnode_fill_uint8(struct flashnode_rec *fnode, struct iovec *iov,
				int param_type, uint8_t val)
{
	struct iscsi_flashnode_param_info *fnode_param;
	struct nlattr *attr;
	int len;

	len = sizeof(struct iscsi_flashnode_param_info) + 1;
	iov->iov_base = iscsi_nla_alloc(param_type, len);
	if (!iov->iov_base)
		return 1;

	attr = iov->iov_base;
	iov->iov_len = NLA_ALIGN(attr->nla_len);

	fnode_param = (struct iscsi_flashnode_param_info *)ISCSI_NLA_DATA(attr);
	fnode_param->param = param_type;
	fnode_param->len = 1;
	fnode_param->value[0] = val;
	return 0;
}
Example #6
0
static int chap_fill_param_str(struct iovec *iov, int param, char *param_val,
			       int param_len)
{
	struct iscsi_param_info *param_info;
	struct nlattr *attr;
	int len;

	len = sizeof(struct iscsi_param_info) + param_len;
	iov->iov_base = iscsi_nla_alloc(param, len);
	if (!iov->iov_base)
		return 1;

	attr = iov->iov_base;
	iov->iov_len = NLA_ALIGN(attr->nla_len);

	param_info = (struct iscsi_param_info *)ISCSI_NLA_DATA(attr);
	param_info->param = param;
	param_info->len = param_len;
	memcpy(param_info->value, param_val, param_len);
	return 0;
}