ホーム › Networking.WinSock › ATM_BLLI_IE
ATM_BLLI_IE
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Layer2Protocol | DWORD | 4 | +0 | +0 | 第2層プロトコルを示す。 |
| Layer2Mode | BYTE | 1 | +4 | +4 | 第2層の動作モードを示す。 |
| Layer2WindowSize | BYTE | 1 | +5 | +5 | 第2層のウィンドウサイズを示す。 |
| Layer2UserSpecifiedProtocol | DWORD | 4 | +8 | +8 | ユーザー指定の第2層プロトコル値を示す。 |
| Layer3Protocol | DWORD | 4 | +12 | +12 | 第3層プロトコルを示す。 |
| Layer3Mode | BYTE | 1 | +16 | +16 | 第3層の動作モードを示す。 |
| Layer3DefaultPacketSize | BYTE | 1 | +17 | +17 | 第3層のデフォルトパケットサイズを示す。 |
| Layer3PacketWindowSize | BYTE | 1 | +18 | +18 | 第3層のパケットウィンドウサイズを示す。 |
| Layer3UserSpecifiedProtocol | DWORD | 4 | +20 | +20 | ユーザー指定の第3層プロトコル値を示す。 |
| Layer3IPI | DWORD | 4 | +24 | +24 | 第3層のISO/IEC TR 9577 IPIを示す。 |
| SnapID | BYTE | 5 | +28 | +28 | SNAP識別用のIDバイト列の先頭。 |
各言語での定義
#include <windows.h>
// ATM_BLLI_IE (x64 36 / x86 36 バイト)
typedef struct ATM_BLLI_IE {
DWORD Layer2Protocol;
BYTE Layer2Mode;
BYTE Layer2WindowSize;
DWORD Layer2UserSpecifiedProtocol;
DWORD Layer3Protocol;
BYTE Layer3Mode;
BYTE Layer3DefaultPacketSize;
BYTE Layer3PacketWindowSize;
DWORD Layer3UserSpecifiedProtocol;
DWORD Layer3IPI;
BYTE SnapID[5];
} ATM_BLLI_IE;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct ATM_BLLI_IE
{
public uint Layer2Protocol;
public byte Layer2Mode;
public byte Layer2WindowSize;
public uint Layer2UserSpecifiedProtocol;
public uint Layer3Protocol;
public byte Layer3Mode;
public byte Layer3DefaultPacketSize;
public byte Layer3PacketWindowSize;
public uint Layer3UserSpecifiedProtocol;
public uint Layer3IPI;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)] public byte[] SnapID;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure ATM_BLLI_IE
Public Layer2Protocol As UInteger
Public Layer2Mode As Byte
Public Layer2WindowSize As Byte
Public Layer2UserSpecifiedProtocol As UInteger
Public Layer3Protocol As UInteger
Public Layer3Mode As Byte
Public Layer3DefaultPacketSize As Byte
Public Layer3PacketWindowSize As Byte
Public Layer3UserSpecifiedProtocol As UInteger
Public Layer3IPI As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=5)> Public SnapID() As Byte
End Structureimport ctypes
from ctypes import wintypes
class ATM_BLLI_IE(ctypes.Structure):
_fields_ = [
("Layer2Protocol", wintypes.DWORD),
("Layer2Mode", ctypes.c_ubyte),
("Layer2WindowSize", ctypes.c_ubyte),
("Layer2UserSpecifiedProtocol", wintypes.DWORD),
("Layer3Protocol", wintypes.DWORD),
("Layer3Mode", ctypes.c_ubyte),
("Layer3DefaultPacketSize", ctypes.c_ubyte),
("Layer3PacketWindowSize", ctypes.c_ubyte),
("Layer3UserSpecifiedProtocol", wintypes.DWORD),
("Layer3IPI", wintypes.DWORD),
("SnapID", ctypes.c_ubyte * 5),
]#[repr(C)]
pub struct ATM_BLLI_IE {
pub Layer2Protocol: u32,
pub Layer2Mode: u8,
pub Layer2WindowSize: u8,
pub Layer2UserSpecifiedProtocol: u32,
pub Layer3Protocol: u32,
pub Layer3Mode: u8,
pub Layer3DefaultPacketSize: u8,
pub Layer3PacketWindowSize: u8,
pub Layer3UserSpecifiedProtocol: u32,
pub Layer3IPI: u32,
pub SnapID: [u8; 5],
}import "golang.org/x/sys/windows"
type ATM_BLLI_IE struct {
Layer2Protocol uint32
Layer2Mode byte
Layer2WindowSize byte
Layer2UserSpecifiedProtocol uint32
Layer3Protocol uint32
Layer3Mode byte
Layer3DefaultPacketSize byte
Layer3PacketWindowSize byte
Layer3UserSpecifiedProtocol uint32
Layer3IPI uint32
SnapID [5]byte
}type
ATM_BLLI_IE = record
Layer2Protocol: DWORD;
Layer2Mode: Byte;
Layer2WindowSize: Byte;
Layer2UserSpecifiedProtocol: DWORD;
Layer3Protocol: DWORD;
Layer3Mode: Byte;
Layer3DefaultPacketSize: Byte;
Layer3PacketWindowSize: Byte;
Layer3UserSpecifiedProtocol: DWORD;
Layer3IPI: DWORD;
SnapID: array[0..4] of Byte;
end;const ATM_BLLI_IE = extern struct {
Layer2Protocol: u32,
Layer2Mode: u8,
Layer2WindowSize: u8,
Layer2UserSpecifiedProtocol: u32,
Layer3Protocol: u32,
Layer3Mode: u8,
Layer3DefaultPacketSize: u8,
Layer3PacketWindowSize: u8,
Layer3UserSpecifiedProtocol: u32,
Layer3IPI: u32,
SnapID: [5]u8,
};type
ATM_BLLI_IE {.bycopy.} = object
Layer2Protocol: uint32
Layer2Mode: uint8
Layer2WindowSize: uint8
Layer2UserSpecifiedProtocol: uint32
Layer3Protocol: uint32
Layer3Mode: uint8
Layer3DefaultPacketSize: uint8
Layer3PacketWindowSize: uint8
Layer3UserSpecifiedProtocol: uint32
Layer3IPI: uint32
SnapID: array[5, uint8]struct ATM_BLLI_IE
{
uint Layer2Protocol;
ubyte Layer2Mode;
ubyte Layer2WindowSize;
uint Layer2UserSpecifiedProtocol;
uint Layer3Protocol;
ubyte Layer3Mode;
ubyte Layer3DefaultPacketSize;
ubyte Layer3PacketWindowSize;
uint Layer3UserSpecifiedProtocol;
uint Layer3IPI;
ubyte[5] SnapID;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; ATM_BLLI_IE サイズ: 36 バイト(x64)
dim st, 9 ; 4byte整数×9(構造体サイズ 36 / 4 切り上げ)
; Layer2Protocol : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; Layer2Mode : BYTE (+4, 1byte) poke st,4,値 / 値 = peek(st,4)
; Layer2WindowSize : BYTE (+5, 1byte) poke st,5,値 / 値 = peek(st,5)
; Layer2UserSpecifiedProtocol : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; Layer3Protocol : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; Layer3Mode : BYTE (+16, 1byte) poke st,16,値 / 値 = peek(st,16)
; Layer3DefaultPacketSize : BYTE (+17, 1byte) poke st,17,値 / 値 = peek(st,17)
; Layer3PacketWindowSize : BYTE (+18, 1byte) poke st,18,値 / 値 = peek(st,18)
; Layer3UserSpecifiedProtocol : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; Layer3IPI : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; SnapID : BYTE (+28, 5byte) varptr(st)+28 を基点に操作(5byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global ATM_BLLI_IE
#field int Layer2Protocol
#field byte Layer2Mode
#field byte Layer2WindowSize
#field int Layer2UserSpecifiedProtocol
#field int Layer3Protocol
#field byte Layer3Mode
#field byte Layer3DefaultPacketSize
#field byte Layer3PacketWindowSize
#field int Layer3UserSpecifiedProtocol
#field int Layer3IPI
#field byte SnapID 5
#endstruct
stdim st, ATM_BLLI_IE ; NSTRUCT 変数を確保
st->Layer2Protocol = 100
mes "Layer2Protocol=" + st->Layer2Protocol