|
Packit |
857059 |
/* BEGIN_ICS_COPYRIGHT5 ****************************************
|
|
Packit |
857059 |
|
|
Packit |
857059 |
Copyright (c) 2015-2017, Intel Corporation
|
|
Packit |
857059 |
|
|
Packit |
857059 |
Redistribution and use in source and binary forms, with or without
|
|
Packit |
857059 |
modification, are permitted provided that the following conditions are met:
|
|
Packit |
857059 |
|
|
Packit |
857059 |
* Redistributions of source code must retain the above copyright notice,
|
|
Packit |
857059 |
this list of conditions and the following disclaimer.
|
|
Packit |
857059 |
* Redistributions in binary form must reproduce the above copyright
|
|
Packit |
857059 |
notice, this list of conditions and the following disclaimer in the
|
|
Packit |
857059 |
documentation and/or other materials provided with the distribution.
|
|
Packit |
857059 |
* Neither the name of Intel Corporation nor the names of its contributors
|
|
Packit |
857059 |
may be used to endorse or promote products derived from this software
|
|
Packit |
857059 |
without specific prior written permission.
|
|
Packit |
857059 |
|
|
Packit |
857059 |
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
Packit |
857059 |
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
Packit |
857059 |
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
Packit |
857059 |
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
|
Packit |
857059 |
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
Packit |
857059 |
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
Packit |
857059 |
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
Packit |
857059 |
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
Packit |
857059 |
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
Packit |
857059 |
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
Packit |
857059 |
|
|
Packit |
857059 |
* ** END_ICS_COPYRIGHT5 ****************************************/
|
|
Packit |
857059 |
/* [ICS VERSION STRING: unknown] */
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#if !defined(SA_NET_H)
|
|
Packit |
857059 |
#define SA_NET_H
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#include <asm/byteorder.h>
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#include <infiniband/sa.h>
|
|
Packit |
857059 |
|
|
Packit |
857059 |
enum {
|
|
Packit |
857059 |
IBV_SA_ATTR_NOTICE = __constant_cpu_to_be16(0x02),
|
|
Packit |
857059 |
IBV_SA_ATTR_INFORM_INFO = __constant_cpu_to_be16(0x03),
|
|
Packit |
857059 |
IBV_SA_ATTR_MC_MEMBER_REC = __constant_cpu_to_be16(0x38),
|
|
Packit |
857059 |
IBV_SA_ATTR_INFORM_INFO_REC = __constant_cpu_to_be16(0xf3)
|
|
Packit |
857059 |
};
|
|
Packit |
857059 |
|
|
Packit |
857059 |
enum {
|
|
Packit |
857059 |
IBV_SA_METHOD_GET = 0x01,
|
|
Packit |
857059 |
IBV_SA_METHOD_SET = 0x02,
|
|
Packit |
857059 |
IBV_SA_METHOD_DELETE = 0x15
|
|
Packit |
857059 |
};
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/* Length of SA attributes on the wire */
|
|
Packit |
857059 |
enum {
|
|
Packit |
857059 |
IBV_SA_ATTR_NOTICE_LEN = 80,
|
|
Packit |
857059 |
IBV_SA_ATTR_INFORM_INFO_LEN = 36,
|
|
Packit |
857059 |
IBV_SA_ATTR_MC_MEMBER_REC_LEN = 52,
|
|
Packit |
857059 |
IBV_SA_ATTR_INFORM_INFO_REC_LEN = 60
|
|
Packit |
857059 |
};
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#define IBV_SA_COMP_MASK(n) __constant_cpu_to_be64(1ull << n)
|
|
Packit |
857059 |
|
|
Packit |
857059 |
struct ibv_sa_net_mcmember_rec {
|
|
Packit |
857059 |
uint8_t mgid[16];
|
|
Packit |
857059 |
uint8_t port_gid[16];
|
|
Packit |
857059 |
uint32_t qkey;
|
|
Packit |
857059 |
uint16_t mlid;
|
|
Packit |
857059 |
/* MtuSelector: 2:304, MTU: 6:306 */
|
|
Packit |
857059 |
uint8_t mtu_info;
|
|
Packit |
857059 |
uint8_t tclass;
|
|
Packit |
857059 |
uint16_t pkey;
|
|
Packit |
857059 |
/* RateSelector: 2:336, Rate: 6:338 */
|
|
Packit |
857059 |
uint8_t rate_info;
|
|
Packit |
857059 |
/* PacketLifeTimeSelector: 2:344, PacketLifeTime: 6:346 */
|
|
Packit |
857059 |
uint8_t packetlifetime_info;
|
|
Packit |
857059 |
/* SL: 4:352, FlowLabel: 20:356, HopLimit: 8:376 */
|
|
Packit |
857059 |
uint32_t sl_flow_hop;
|
|
Packit |
857059 |
/* Scope: 4:384, JoinState: 4:388 */
|
|
Packit |
857059 |
uint8_t scope_join;
|
|
Packit |
857059 |
/* ProxyJoin: 1:392, rsvd: 7:393 */
|
|
Packit |
857059 |
uint8_t proxy_join;
|
|
Packit |
857059 |
uint8_t rsvd[2];
|
|
Packit |
857059 |
};
|
|
Packit |
857059 |
|
|
Packit |
857059 |
enum {
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_MTU_SELECTOR_OFFSET = 304,
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_MTU_SELECTOR_LENGTH = 2,
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_MTU_OFFSET = 306,
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_MTU_LENGTH = 6,
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_RATE_SELECTOR_OFFSET = 336,
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_RATE_SELECTOR_LENGTH = 2,
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_RATE_OFFSET = 338,
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_RATE_LENGTH = 6,
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_PACKETLIFE_SELECTOR_OFFSET = 344,
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_PACKETLIFE_SELECTOR_LENGTH = 2,
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_PACKETLIFE_OFFSET = 346,
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_PACKETLIFE_LENGTH = 6,
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_SL_OFFSET = 352,
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_SL_LENGTH = 4,
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_FLOW_LABEL_OFFSET = 356,
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_FLOW_LABEL_LENGTH = 20,
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_HOP_LIMIT_OFFSET = 376,
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_HOP_LIMIT_LENGTH = 8,
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_SCOPE_OFFSET = 384,
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_SCOPE_LENGTH = 4,
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_JOIN_STATE_OFFSET = 388,
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_JOIN_STATE_LENGTH = 4,
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_PROXY_JOIN_OFFSET = 392,
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_PROXY_JOIN_LENGTH = 1
|
|
Packit |
857059 |
};
|
|
Packit |
857059 |
|
|
Packit |
857059 |
enum {
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_MGID = IBV_SA_COMP_MASK(0),
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_PORT_GID = IBV_SA_COMP_MASK(1),
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_QKEY = IBV_SA_COMP_MASK(2),
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_MLID = IBV_SA_COMP_MASK(3),
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_MTU_SELECTOR = IBV_SA_COMP_MASK(4),
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_MTU = IBV_SA_COMP_MASK(5),
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_TRAFFIC_CLASS = IBV_SA_COMP_MASK(6),
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_PKEY = IBV_SA_COMP_MASK(7),
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_RATE_SELECTOR = IBV_SA_COMP_MASK(8),
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_RATE = IBV_SA_COMP_MASK(9),
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_PACKET_LIFE_TIME_SELECTOR = IBV_SA_COMP_MASK(10),
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_PACKET_LIFE_TIME = IBV_SA_COMP_MASK(11),
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_SL = IBV_SA_COMP_MASK(12),
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_FLOW_LABEL = IBV_SA_COMP_MASK(13),
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_HOP_LIMIT = IBV_SA_COMP_MASK(14),
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_SCOPE = IBV_SA_COMP_MASK(15),
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_JOIN_STATE = IBV_SA_COMP_MASK(16),
|
|
Packit |
857059 |
IBV_SA_MCMEMBER_REC_PROXY_JOIN = IBV_SA_COMP_MASK(17)
|
|
Packit |
857059 |
};
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/* InformInfo:Type */
|
|
Packit |
857059 |
enum {
|
|
Packit |
857059 |
IBV_SA_EVENT_TYPE_FATAL = __constant_cpu_to_be16(0x0),
|
|
Packit |
857059 |
IBV_SA_EVENT_TYPE_URGENT = __constant_cpu_to_be16(0x1),
|
|
Packit |
857059 |
IBV_SA_EVENT_TYPE_SECURITY = __constant_cpu_to_be16(0x2),
|
|
Packit |
857059 |
IBV_SA_EVENT_TYPE_SM = __constant_cpu_to_be16(0x3),
|
|
Packit |
857059 |
IBV_SA_EVENT_TYPE_INFO = __constant_cpu_to_be16(0x4),
|
|
Packit |
857059 |
IBV_SA_EVENT_TYPE_EMPTY = __constant_cpu_to_be16(0x7F),
|
|
Packit |
857059 |
IBV_SA_EVENT_TYPE_ALL = __constant_cpu_to_be16(0xFFFF)
|
|
Packit |
857059 |
};
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/* InformInfo:TrapNumber */
|
|
Packit |
857059 |
enum {
|
|
Packit |
857059 |
IBV_SA_SM_TRAP_GID_IN_SERVICE = __constant_cpu_to_be16(64),
|
|
Packit |
857059 |
IBV_SA_SM_TRAP_GID_OUT_OF_SERVICE = __constant_cpu_to_be16(65),
|
|
Packit |
857059 |
IBV_SA_SM_TRAP_CREATE_MC_GROUP = __constant_cpu_to_be16(66),
|
|
Packit |
857059 |
IBV_SA_SM_TRAP_DELETE_MC_GROUP = __constant_cpu_to_be16(67),
|
|
Packit |
857059 |
IBV_SA_SM_TRAP_PORT_CHANGE_STATE = __constant_cpu_to_be16(128),
|
|
Packit |
857059 |
IBV_SA_SM_TRAP_LINK_INTEGRITY = __constant_cpu_to_be16(129),
|
|
Packit |
857059 |
IBV_SA_SM_TRAP_EXCESSIVE_BUFFER_OVERRUN = __constant_cpu_to_be16(130),
|
|
Packit |
857059 |
IBV_SA_SM_TRAP_FLOW_CONTROL_UPDATE_EXPIRED = __constant_cpu_to_be16(131),
|
|
Packit |
857059 |
IBV_SA_SM_TRAP_BAD_M_KEY = __constant_cpu_to_be16(256),
|
|
Packit |
857059 |
IBV_SA_SM_TRAP_BAD_P_KEY = __constant_cpu_to_be16(257),
|
|
Packit |
857059 |
IBV_SA_SM_TRAP_BAD_Q_KEY = __constant_cpu_to_be16(258),
|
|
Packit |
857059 |
IBV_SA_SM_TRAP_ALL = __constant_cpu_to_be16(0xFFFF)
|
|
Packit |
857059 |
};
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/* InformInfo:ProducerType */
|
|
Packit |
857059 |
enum {
|
|
Packit |
857059 |
IBV_SA_EVENT_PRODUCER_TYPE_CA = __constant_cpu_to_be32(0x1),
|
|
Packit |
857059 |
IBV_SA_EVENT_PRODUCER_TYPE_SWITCH = __constant_cpu_to_be32(0x2),
|
|
Packit |
857059 |
IBV_SA_EVENT_PRODUCER_TYPE_ROUTER = __constant_cpu_to_be32(0x3),
|
|
Packit |
857059 |
IBV_SA_EVENT_PRODUCER_TYPE_CLASS_MANAGER = __constant_cpu_to_be32(0x4),
|
|
Packit |
857059 |
IBV_SA_EVENT_PRODUCER_TYPE_ALL = __constant_cpu_to_be32(0xFFFFFF)
|
|
Packit |
857059 |
};
|
|
Packit |
857059 |
|
|
Packit |
857059 |
struct ibv_sa_net_inform_info {
|
|
Packit |
857059 |
uint8_t gid[16];
|
|
Packit |
857059 |
uint16_t lid_range_begin;
|
|
Packit |
857059 |
uint16_t lid_range_end;
|
|
Packit |
857059 |
uint16_t rsvd;
|
|
Packit |
857059 |
uint8_t is_generic;
|
|
Packit |
857059 |
uint8_t subscribe;
|
|
Packit |
857059 |
uint16_t type;
|
|
Packit |
857059 |
/* TrapNumber/DeviceID */
|
|
Packit |
857059 |
uint16_t trap_num_device_id;
|
|
Packit |
857059 |
/* QPN: 24:224, rsvd: 3:248, RespTimeValue: 5:251 */
|
|
Packit |
857059 |
uint32_t qpn_resptime;
|
|
Packit |
857059 |
/* rsvd: 8:256, ProducerType/VendorID: 24:264 */
|
|
Packit |
857059 |
uint32_t producer_type_vendor_id;
|
|
Packit |
857059 |
};
|
|
Packit |
857059 |
|
|
Packit |
857059 |
enum {
|
|
Packit |
857059 |
IBV_SA_INFORM_INFO_QPN_OFFSET = 224,
|
|
Packit |
857059 |
IBV_SA_INFORM_INFO_QPN_LENGTH = 24,
|
|
Packit |
857059 |
IBV_SA_INFORM_INFO_RESP_TIME_OFFSET = 251,
|
|
Packit |
857059 |
IBV_SA_INFORM_INFO_RESP_TIME_LENGTH = 5,
|
|
Packit |
857059 |
IBV_SA_INFORM_INFO_PRODUCER_TYPE_OFFSET = 264,
|
|
Packit |
857059 |
IBV_SA_INFORM_INFO_PRODUCER_TYPE_LENGTH = 24,
|
|
Packit |
857059 |
IBV_SA_INFORM_INFO_VENDOR_ID_OFFSET = 264,
|
|
Packit |
857059 |
IBV_SA_INFORM_INFO_VENDOR_ID_LENGTH = 24
|
|
Packit |
857059 |
};
|
|
Packit |
857059 |
|
|
Packit |
857059 |
struct ibv_sa_net_notice {
|
|
Packit |
857059 |
/* IsGeneric: 1:0, Type: 7:1, ProducerType/VendorID: 24:8 */
|
|
Packit |
857059 |
uint32_t generic_type_producer;
|
|
Packit |
857059 |
/* TrapNumber/DeviceID */
|
|
Packit |
857059 |
uint16_t trap_num_device_id;
|
|
Packit |
857059 |
uint16_t issuer_lid;
|
|
Packit |
857059 |
/* NoticeToggle: 1:64, NoticeCount: 15:65 */
|
|
Packit |
857059 |
uint16_t toggle_count;
|
|
Packit |
857059 |
uint8_t data_details[54];
|
|
Packit |
857059 |
uint8_t issuer_gid[16];
|
|
Packit |
857059 |
};
|
|
Packit |
857059 |
|
|
Packit |
857059 |
enum {
|
|
Packit |
857059 |
IBV_SA_NOTICE_IS_GENERIC_OFFSET = 0,
|
|
Packit |
857059 |
IBV_SA_NOTICE_IS_GENERIC_LENGTH = 1,
|
|
Packit |
857059 |
IBV_SA_NOTICE_TYPE_OFFSET = 1,
|
|
Packit |
857059 |
IBV_SA_NOTICE_TYPE_LENGTH = 7,
|
|
Packit |
857059 |
IBV_SA_NOTICE_PRODUCER_TYPE_OFFSET = 8,
|
|
Packit |
857059 |
IBV_SA_NOTICE_PRODUCER_TYPE_LENGTH = 24,
|
|
Packit |
857059 |
IBV_SA_NOTICE_VENDOR_ID_OFFSET = 8,
|
|
Packit |
857059 |
IBV_SA_NOTICE_VENDOR_IF_LENGTH = 24,
|
|
Packit |
857059 |
IBV_SA_NOTICE_TOGGLE_OFFSET = 64,
|
|
Packit |
857059 |
IBV_SA_NOTICE_TOGGLE_LENGTH = 1,
|
|
Packit |
857059 |
IBV_SA_NOTICE_COUNT_OFFSET = 65,
|
|
Packit |
857059 |
IBV_SA_NOTICE_COUNT_LENGTH = 15,
|
|
Packit |
857059 |
};
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/*
|
|
Packit |
857059 |
* SM notice data details for:
|
|
Packit |
857059 |
*
|
|
Packit |
857059 |
* IB_SA_SM_TRAP_GID_IN_SERVICE = 64
|
|
Packit |
857059 |
* IB_SA_SM_TRAP_GID_OUT_OF_SERVICE = 65
|
|
Packit |
857059 |
* IB_SA_SM_TRAP_CREATE_MC_GROUP = 66
|
|
Packit |
857059 |
* IB_SA_SM_TRAP_DELETE_MC_GROUP = 67
|
|
Packit |
857059 |
*/
|
|
Packit |
857059 |
struct ibv_sa_net_notice_data_gid {
|
|
Packit |
857059 |
uint8_t reserved[6];
|
|
Packit |
857059 |
uint8_t gid[16];
|
|
Packit |
857059 |
uint8_t padding[32];
|
|
Packit |
857059 |
};
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/*
|
|
Packit |
857059 |
* SM notice data details for:
|
|
Packit |
857059 |
*
|
|
Packit |
857059 |
* IB_SA_SM_TRAP_PORT_CHANGE_STATE = 128
|
|
Packit |
857059 |
*/
|
|
Packit |
857059 |
struct ibv_sa_net_notice_data_port_change {
|
|
Packit |
857059 |
uint16_t lid;
|
|
Packit |
857059 |
uint8_t padding[52];
|
|
Packit |
857059 |
};
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/*
|
|
Packit |
857059 |
* SM notice data details for:
|
|
Packit |
857059 |
*
|
|
Packit |
857059 |
* IB_SA_SM_TRAP_LINK_INTEGRITY = 129
|
|
Packit |
857059 |
* IB_SA_SM_TRAP_EXCESSIVE_BUFFER_OVERRUN = 130
|
|
Packit |
857059 |
* IB_SA_SM_TRAP_FLOW_CONTROL_UPDATE_EXPIRED = 131
|
|
Packit |
857059 |
*/
|
|
Packit |
857059 |
struct ibv_sa_net_notice_data_port_error {
|
|
Packit |
857059 |
uint8_t reserved[2];
|
|
Packit |
857059 |
uint16_t lid;
|
|
Packit |
857059 |
uint8_t port_num;
|
|
Packit |
857059 |
uint8_t padding[49];
|
|
Packit |
857059 |
};
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/**
|
|
Packit |
857059 |
* ibv_sa_get_field - Extract a bit field value from a structure.
|
|
Packit |
857059 |
* @data: Pointer to the start of the structure.
|
|
Packit |
857059 |
* @offset: Bit offset of field from start of structure.
|
|
Packit |
857059 |
* @size: Size of field, in bits.
|
|
Packit |
857059 |
*
|
|
Packit |
857059 |
* The structure must be in network-byte order. The returned value is in
|
|
Packit |
857059 |
* host-byte order.
|
|
Packit |
857059 |
*/
|
|
Packit |
857059 |
uint32_t ibv_sa_get_field(void *data, int offset, int size);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
/**
|
|
Packit |
857059 |
* ibv_sa_set_field - Set a bit field value in a structure.
|
|
Packit |
857059 |
* @data: Pointer to the start of the structure.
|
|
Packit |
857059 |
* @value: Value to assign to field.
|
|
Packit |
857059 |
* @offset: Bit offset of field from start of structure.
|
|
Packit |
857059 |
* @size: Size of field, in bits.
|
|
Packit |
857059 |
*
|
|
Packit |
857059 |
* The structure must be in network-byte order. The value to set is in
|
|
Packit |
857059 |
* host-byte order.
|
|
Packit |
857059 |
*/
|
|
Packit |
857059 |
void ibv_sa_set_field(void *data, uint32_t value, int offset, int size);
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#endif /* SA_NET_H */
|