|
Packit |
2e24a8 |
/*
|
|
Packit |
2e24a8 |
* Copyright (c) 2008, Intel Corporation.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* This program is free software; you can redistribute it and/or modify it
|
|
Packit |
2e24a8 |
* under the terms and conditions of the GNU Lesser General Public License,
|
|
Packit |
2e24a8 |
* version 2.1, as published by the Free Software Foundation.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
Packit |
2e24a8 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
Packit |
2e24a8 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
|
Packit |
2e24a8 |
* for more details.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* You should have received a copy of the GNU Lesser General Public License
|
|
Packit |
2e24a8 |
* along with this program; if not, write to the Free Software Foundation, Inc.,
|
|
Packit |
2e24a8 |
* 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
#ifndef _LIBSA_NET_TYPES_H_
|
|
Packit |
2e24a8 |
#define _LIBSA_NET_TYPES_H_
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
#if !defined(NTOHL)
|
|
Packit |
2e24a8 |
#include <netinet/in.h>
|
|
Packit |
2e24a8 |
#endif /* NTOHL */
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/*
|
|
Packit |
2e24a8 |
* Type definitions for network order fields in protocol packets.
|
|
Packit |
2e24a8 |
* The access functions below do gets and puts on these structures.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
typedef unsigned char net8_t; /* direct use and assignment allowed */
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/*
|
|
Packit |
2e24a8 |
* Aligned network order types.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
typedef struct {
|
|
Packit |
2e24a8 |
u_int16_t net_data;
|
|
Packit |
2e24a8 |
} net16_t;
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
typedef struct {
|
|
Packit |
2e24a8 |
u_int32_t net_data;
|
|
Packit |
2e24a8 |
} net32_t;
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/*
|
|
Packit |
2e24a8 |
* The 64-bit type only requires 32-bit alignment.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
typedef struct {
|
|
Packit |
2e24a8 |
u_int32_t net_data[2]; /* most significant word first */
|
|
Packit |
2e24a8 |
} net64_t;
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/*
|
|
Packit |
2e24a8 |
* 24-bit type. Byte aligned, in spite of the name.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
typedef struct {
|
|
Packit |
2e24a8 |
unsigned char net_data[3];
|
|
Packit |
2e24a8 |
} net24_t;
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/*
|
|
Packit |
2e24a8 |
* 48-bit type. Byte aligned.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
typedef struct {
|
|
Packit |
2e24a8 |
unsigned char net_data[6];
|
|
Packit |
2e24a8 |
} net48_t;
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/*
|
|
Packit |
2e24a8 |
* Unaligned network order types.
|
|
Packit |
2e24a8 |
* Any of these structures can be byte aligned. No padding is implied.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
typedef struct {
|
|
Packit |
2e24a8 |
unsigned char net_data[2];
|
|
Packit |
2e24a8 |
} ua_net16_t;
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
typedef struct {
|
|
Packit |
2e24a8 |
unsigned char net_data[4];
|
|
Packit |
2e24a8 |
} ua_net32_t;
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
typedef struct {
|
|
Packit |
2e24a8 |
unsigned char net_data[8];
|
|
Packit |
2e24a8 |
} ua_net64_t;
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/*
|
|
Packit |
2e24a8 |
* Accessor functions.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* net8_get(net) - fetch from a network-order 8-bit field.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param net pointer to network-order 8-bit data.
|
|
Packit |
2e24a8 |
* @return the host-order value.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
static inline u_int8_t net8_get(const net8_t * net)
|
|
Packit |
2e24a8 |
{
|
|
Packit |
2e24a8 |
return *net;
|
|
Packit |
2e24a8 |
}
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* net8_put(net, val) - store to a network-order 8-bit field.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param net pointer to network-order 8-bit data.
|
|
Packit |
2e24a8 |
* @param val host-order value to be stored at net.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
static inline void net8_put(net8_t * net, u_int8_t val)
|
|
Packit |
2e24a8 |
{
|
|
Packit |
2e24a8 |
*net = val;
|
|
Packit |
2e24a8 |
}
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* net16_get(net) - fetch from a network-order 16-bit field.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param net pointer to type net16_t, network-order 16-bit data.
|
|
Packit |
2e24a8 |
* @return the host-order value.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
static inline u_int16_t net16_get(const net16_t * net)
|
|
Packit |
2e24a8 |
{
|
|
Packit |
2e24a8 |
return ntohs(net->net_data);
|
|
Packit |
2e24a8 |
}
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* net16_put(net, val) - store to a network-order 16-bit field.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param net pointer to a net16_t, network-order 16-bit data.
|
|
Packit |
2e24a8 |
* @param val host-order value to be stored at net.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
static inline void net16_put(net16_t * net, u_int16_t val)
|
|
Packit |
2e24a8 |
{
|
|
Packit |
2e24a8 |
net->net_data = htons(val);
|
|
Packit |
2e24a8 |
}
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* ua_net16_get(net) - fetch from an unaligned network-order 16-bit field.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param net pointer to type ua_net16_t, unaligned, network-order 16-bit data.
|
|
Packit |
2e24a8 |
* @return the host-order value.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
static inline u_int16_t ua_net16_get(const ua_net16_t * net)
|
|
Packit |
2e24a8 |
{
|
|
Packit |
2e24a8 |
return (net->net_data[0] << 8) | net->net_data[1];
|
|
Packit |
2e24a8 |
}
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* ua_net16_put(net, val) - store to a network-order 16-bit field.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param net pointer to a ua_net16_t, network-order 16-bit data.
|
|
Packit |
2e24a8 |
* @param val host-order value to be stored at net.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
static inline void ua_net16_put(ua_net16_t * net, u_int16_t val)
|
|
Packit |
2e24a8 |
{
|
|
Packit |
2e24a8 |
net->net_data[0] = (u_int8_t)((val >> 8) & 0xFF);
|
|
Packit |
2e24a8 |
net->net_data[1] = (u_int8_t)(val & 0xFF);
|
|
Packit |
2e24a8 |
}
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* net24_get(net) - fetch from a network-order 24-bit field.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param net pointer to type net24_t, network-order 24-bit data.
|
|
Packit |
2e24a8 |
* @return the host-order value.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
static inline u_int32_t net24_get(const net24_t * net)
|
|
Packit |
2e24a8 |
{
|
|
Packit |
2e24a8 |
return (net->net_data[0] << 16) |
|
|
Packit |
2e24a8 |
(net->net_data[1] << 8) | net->net_data[2];
|
|
Packit |
2e24a8 |
}
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* net24_put(net, val) - store to a network-order 24-bit field.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param net pointer to a net24_t, network-order 24-bit data.
|
|
Packit |
2e24a8 |
* @param val host-order value to be stored at net.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
static inline void net24_put(net24_t * net, u_int32_t val)
|
|
Packit |
2e24a8 |
{
|
|
Packit |
2e24a8 |
net->net_data[0] = (u_int8_t)((val >> 16) & 0xFF);
|
|
Packit |
2e24a8 |
net->net_data[1] = (u_int8_t)((val >> 8) & 0xFF);
|
|
Packit |
2e24a8 |
net->net_data[2] = (u_int8_t)(val & 0xFF);
|
|
Packit |
2e24a8 |
}
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* net32_get(net) - fetch from a network-order 32-bit field.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param net pointer to type net32_t, network-order 32-bit data.
|
|
Packit |
2e24a8 |
* @return the host-order value.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
static inline u_int32_t net32_get(const net32_t * net)
|
|
Packit |
2e24a8 |
{
|
|
Packit |
2e24a8 |
return ntohl(net->net_data);
|
|
Packit |
2e24a8 |
}
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* net32_put(net, val) - store to a network-order 32-bit field.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param net pointer to a net32_t, network-order 32-bit data.
|
|
Packit |
2e24a8 |
* @param val host-order value to be stored at net.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
static inline void net32_put(net32_t * net, u_int32_t val)
|
|
Packit |
2e24a8 |
{
|
|
Packit |
2e24a8 |
net->net_data = htonl(val);
|
|
Packit |
2e24a8 |
}
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* ua_net32_get(net) - fetch from an unaligned network-order 32-bit field.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param net pointer to type ua_net32_t, unaligned, network-order 32-bit data.
|
|
Packit |
2e24a8 |
* @return the host-order value.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
static inline u_int32_t ua_net32_get(const ua_net32_t * net)
|
|
Packit |
2e24a8 |
{
|
|
Packit |
2e24a8 |
return (net->net_data[0] << 24) | (net->net_data[1] << 16) |
|
|
Packit |
2e24a8 |
(net->net_data[2] << 8) | net->net_data[3];
|
|
Packit |
2e24a8 |
}
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* ua_net32_put(net, val) - store to a network-order 32-bit field.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param net pointer to a ua_net32_t, network-order 32-bit data.
|
|
Packit |
2e24a8 |
* @param val host-order value to be stored at net.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
static inline void ua_net32_put(ua_net32_t * net, u_int32_t val)
|
|
Packit |
2e24a8 |
{
|
|
Packit |
2e24a8 |
net->net_data[0] = (u_int8_t)((val >> 24) & 0xFF);
|
|
Packit |
2e24a8 |
net->net_data[1] = (u_int8_t)((val >> 16) & 0xFF);
|
|
Packit |
2e24a8 |
net->net_data[2] = (u_int8_t)((val >> 8) & 0xFF);
|
|
Packit |
2e24a8 |
net->net_data[3] = (u_int8_t)(val & 0xFF);
|
|
Packit |
2e24a8 |
}
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* net48_get(net) - fetch from a network-order 48-bit field.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param net pointer to type net48_t, network-order 48-bit data.
|
|
Packit |
2e24a8 |
* @return the host-order value.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
static inline u_int64_t net48_get(const net48_t * net)
|
|
Packit |
2e24a8 |
{
|
|
Packit |
2e24a8 |
return ((u_int64_t) net->net_data[0] << 40) |
|
|
Packit |
2e24a8 |
((u_int64_t) net->net_data[1] << 32) |
|
|
Packit |
2e24a8 |
((u_int64_t) net->net_data[2] << 24) |
|
|
Packit |
2e24a8 |
((u_int64_t) net->net_data[3] << 16) |
|
|
Packit |
2e24a8 |
((u_int64_t) net->net_data[4] << 8) |
|
|
Packit |
2e24a8 |
(u_int64_t) net->net_data[5];
|
|
Packit |
2e24a8 |
}
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* net48_put(net, val) - store to a network-order 48-bit field.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param net pointer to a net48_t, network-order 48-bit data.
|
|
Packit |
2e24a8 |
* @param val host-order value to be stored at net.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
static inline void net48_put(net48_t * net, u_int64_t val)
|
|
Packit |
2e24a8 |
{
|
|
Packit |
2e24a8 |
net->net_data[0] = (u_int8_t)((val >> 40) & 0xFF);
|
|
Packit |
2e24a8 |
net->net_data[1] = (u_int8_t)((val >> 32) & 0xFF);
|
|
Packit |
2e24a8 |
net->net_data[2] = (u_int8_t)((val >> 24) & 0xFF);
|
|
Packit |
2e24a8 |
net->net_data[3] = (u_int8_t)((val >> 16) & 0xFF);
|
|
Packit |
2e24a8 |
net->net_data[4] = (u_int8_t)((val >> 8) & 0xFF);
|
|
Packit |
2e24a8 |
net->net_data[5] = (u_int8_t)(val & 0xFF);
|
|
Packit |
2e24a8 |
}
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* net64_get(net) - fetch from a network-order 64-bit field.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param net pointer to type net64_t, network-order 64-bit data.
|
|
Packit |
2e24a8 |
* @return the host-order value.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
static inline u_int64_t net64_get(const net64_t * net)
|
|
Packit |
2e24a8 |
{
|
|
Packit |
2e24a8 |
return ((u_int64_t) ntohl(net->net_data[0]) << 32) |
|
|
Packit |
2e24a8 |
ntohl(net->net_data[1]);
|
|
Packit |
2e24a8 |
}
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* net64_put(net, val) - store to a network-order 64-bit field.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param net pointer to a net64_t, network-order 64-bit data.
|
|
Packit |
2e24a8 |
* @param val host-order value to be stored at net.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
static inline void net64_put(net64_t * net, u_int64_t val)
|
|
Packit |
2e24a8 |
{
|
|
Packit |
2e24a8 |
net->net_data[0] = (u_int32_t)htonl(val >> 32);
|
|
Packit |
2e24a8 |
net->net_data[1] = (u_int32_t)htonl((u_int32_t) val);
|
|
Packit |
2e24a8 |
}
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* ua_net64_get(net) - fetch from an unaligned network-order 64-bit field.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param net pointer to type ua_net64_t, unaligned, network-order 64-bit data.
|
|
Packit |
2e24a8 |
* @return the host-order value.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
static inline u_int64_t ua_net64_get(const ua_net64_t * net)
|
|
Packit |
2e24a8 |
{
|
|
Packit |
2e24a8 |
return ((u_int64_t) net->net_data[0] << 56) |
|
|
Packit |
2e24a8 |
((u_int64_t) net->net_data[1] << 48) |
|
|
Packit |
2e24a8 |
((u_int64_t) net->net_data[2] << 40) |
|
|
Packit |
2e24a8 |
((u_int64_t) net->net_data[3] << 32) |
|
|
Packit |
2e24a8 |
((u_int64_t) net->net_data[4] << 24) |
|
|
Packit |
2e24a8 |
((u_int64_t) net->net_data[5] << 16) |
|
|
Packit |
2e24a8 |
((u_int64_t) net->net_data[6] << 8) |
|
|
Packit |
2e24a8 |
(u_int64_t) net->net_data[7];
|
|
Packit |
2e24a8 |
}
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* ua_net64_put(net, val) - store to a network-order 64-bit field.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param net pointer to a ua_net64_t, network-order 64-bit data.
|
|
Packit |
2e24a8 |
* @param val host-order value to be stored at net.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
static inline void ua_net64_put(ua_net64_t * net, u_int64_t val)
|
|
Packit |
2e24a8 |
{
|
|
Packit |
2e24a8 |
net->net_data[0] = (u_int8_t)((val >> 56) & 0xFF);
|
|
Packit |
2e24a8 |
net->net_data[1] = (u_int8_t)((val >> 48) & 0xFF);
|
|
Packit |
2e24a8 |
net->net_data[2] = (u_int8_t)((val >> 40) & 0xFF);
|
|
Packit |
2e24a8 |
net->net_data[3] = (u_int8_t)((val >> 32) & 0xFF);
|
|
Packit |
2e24a8 |
net->net_data[4] = (u_int8_t)((val >> 24) & 0xFF);
|
|
Packit |
2e24a8 |
net->net_data[5] = (u_int8_t)((val >> 16) & 0xFF);
|
|
Packit |
2e24a8 |
net->net_data[6] = (u_int8_t)((val >> 8) & 0xFF);
|
|
Packit |
2e24a8 |
net->net_data[7] = (u_int8_t)(val & 0xFF);
|
|
Packit |
2e24a8 |
}
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/*
|
|
Packit |
2e24a8 |
* Compile-time initializers for the network-order type structures.
|
|
Packit |
2e24a8 |
* Note that the upper byte of these values is not masked so the
|
|
Packit |
2e24a8 |
* compiler will catch initializers that don't fit in the field.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* NET8_INIT(_val) - initialize a net8_t type.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param _val 8-bit value.
|
|
Packit |
2e24a8 |
* @return net8_t network-order value.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
#define NET8_INIT(_val) (_val)
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* NET24_INIT(_val) - initialize a net24_t type.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param _val host-order value.
|
|
Packit |
2e24a8 |
* @return net24_t network-order value.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
#define NET24_INIT(_val) { { \
|
|
Packit |
2e24a8 |
((_val) >> 16), \
|
|
Packit |
2e24a8 |
((_val) >> 8) & 0xff, \
|
|
Packit |
2e24a8 |
((_val) >> 0) & 0xff \
|
|
Packit |
2e24a8 |
} }
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* NET48_INIT(_val) - initialize a net48_t type.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param _val host-order value.
|
|
Packit |
2e24a8 |
* @return net48_t network-order value.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
#define NET48_INIT(_val) { { \
|
|
Packit |
2e24a8 |
((_val) >> 40), \
|
|
Packit |
2e24a8 |
((_val) >> 32) & 0xff, \
|
|
Packit |
2e24a8 |
((_val) >> 24) & 0xff, \
|
|
Packit |
2e24a8 |
((_val) >> 16) & 0xff, \
|
|
Packit |
2e24a8 |
((_val) >> 8) & 0xff, \
|
|
Packit |
2e24a8 |
((_val) >> 0) & 0xff \
|
|
Packit |
2e24a8 |
} }
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* NET16_INIT(_val) - initialize a net16_t type.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param _val host-order value.
|
|
Packit |
2e24a8 |
* @return net16_t network-order value.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
#define NET16_INIT(_val) { htons(_val) }
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* UA_NET16_INIT(_val) - initialize an unaligned 16-bit type.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param _val host-order value.
|
|
Packit |
2e24a8 |
* @return ua_net24_t network-order value.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
#define UA_NET16_INIT(_val) { { \
|
|
Packit |
2e24a8 |
((_val) >> 8), \
|
|
Packit |
2e24a8 |
((_val) >> 0) & 0xff \
|
|
Packit |
2e24a8 |
} }
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* NET32_INIT(_val) - initialize a 32-bit type.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param _val host-order value.
|
|
Packit |
2e24a8 |
* @return net32_t network-order value.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
#define NET32_INIT(_val) { htonl(_val) }
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* UA_NET32_INIT(_val) - initialize an unaligned 32-bit type.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param _val host-order value.
|
|
Packit |
2e24a8 |
* @return ua_net32_t network-order value.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
#define UA_NET32_INIT(_val) { { \
|
|
Packit |
2e24a8 |
((_val) >> 24), \
|
|
Packit |
2e24a8 |
((_val) >> 16) & 0xff, \
|
|
Packit |
2e24a8 |
((_val) >> 8) & 0xff, \
|
|
Packit |
2e24a8 |
((_val) >> 0) & 0xff \
|
|
Packit |
2e24a8 |
} }
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* UA_NET48_INIT(_val) - initialize an unaligned 48-bit type.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param _val host-order value.
|
|
Packit |
2e24a8 |
* @return ua_net48_t network-order value.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
#define UA_NET48_INIT(_val) { { \
|
|
Packit |
2e24a8 |
((_val) >> 40), \
|
|
Packit |
2e24a8 |
((_val) >> 32) & 0xff, \
|
|
Packit |
2e24a8 |
((_val) >> 24) & 0xff, \
|
|
Packit |
2e24a8 |
((_val) >> 16) & 0xff, \
|
|
Packit |
2e24a8 |
((_val) >> 8) & 0xff, \
|
|
Packit |
2e24a8 |
((_val) >> 0) & 0xff \
|
|
Packit |
2e24a8 |
} }
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* NET64_INIT(_val) - initialize an unaligned 64-bit type.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param _val host-order value.
|
|
Packit |
2e24a8 |
* @return ua_net64_t network-order value.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
#define NET64_INIT(_val) { { \
|
|
Packit |
2e24a8 |
htonl((_val) >> 32), \
|
|
Packit |
2e24a8 |
htonl((_val) & 0xffffffff) \
|
|
Packit |
2e24a8 |
} }
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
/**
|
|
Packit |
2e24a8 |
* UA_NET64_INIT(_val) - initialize a 64-bit type.
|
|
Packit |
2e24a8 |
*
|
|
Packit |
2e24a8 |
* @param _val host-order value.
|
|
Packit |
2e24a8 |
* @return net64_t network-order value.
|
|
Packit |
2e24a8 |
*/
|
|
Packit |
2e24a8 |
#define UA_NET64_INIT(_val) { { \
|
|
Packit |
2e24a8 |
((_val) >> 56), \
|
|
Packit |
2e24a8 |
((_val) >> 48) & 0xff, \
|
|
Packit |
2e24a8 |
((_val) >> 40) & 0xff, \
|
|
Packit |
2e24a8 |
((_val) >> 32) & 0xff, \
|
|
Packit |
2e24a8 |
((_val) >> 24) & 0xff, \
|
|
Packit |
2e24a8 |
((_val) >> 16) & 0xff, \
|
|
Packit |
2e24a8 |
((_val) >> 8) & 0xff, \
|
|
Packit |
2e24a8 |
((_val) >> 0) & 0xff \
|
|
Packit |
2e24a8 |
} }
|
|
Packit |
2e24a8 |
|
|
Packit |
2e24a8 |
#endif /* _LIBSA_NET_TYPES_H_ */
|