Win32 API 日本語リファレンス
ホームNetworking.WinSock › ATM_BLLI_IE

ATM_BLLI_IE

構造体
サイズx64: 36 バイト / x86: 36 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
Layer2ProtocolDWORD4+0+0第2層プロトコルを示す。
Layer2ModeBYTE1+4+4第2層の動作モードを示す。
Layer2WindowSizeBYTE1+5+5第2層のウィンドウサイズを示す。
Layer2UserSpecifiedProtocolDWORD4+8+8ユーザー指定の第2層プロトコル値を示す。
Layer3ProtocolDWORD4+12+12第3層プロトコルを示す。
Layer3ModeBYTE1+16+16第3層の動作モードを示す。
Layer3DefaultPacketSizeBYTE1+17+17第3層のデフォルトパケットサイズを示す。
Layer3PacketWindowSizeBYTE1+18+18第3層のパケットウィンドウサイズを示す。
Layer3UserSpecifiedProtocolDWORD4+20+20ユーザー指定の第3層プロトコル値を示す。
Layer3IPIDWORD4+24+24第3層のISO/IEC TR 9577 IPIを示す。
SnapIDBYTE5+28+28SNAP識別用の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 Structure
import 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