NG_LMI(4)

πŸ’– NG_LMI β€” frame relay LMI protocol netgraph node type πŸ’–

okay bestie, pull up a chair because we're talking about ng_lmi(4) β€” it's a netgraph node type, and it lives in the Kernel Interfaces Manual, so you know it's main character energy in the kernel world. 🫢


✨ SYNOPSIS ✨

#include <sys/types.h>
#include <netgraph/ng_lmi.h>

that's it, that's the whole vibe. two includes. slay. πŸ’…


🌸 DESCRIPTION 🌸

so the lmi node type does the frame relay LMI protocol. iconic behavior honestly.

it supports these LMI types:

  • ITU Annex A
  • ANSI Annex D
  • Group-of-four

and also?? it supports auto-detection of the LMI type. the way that it just figures out what the switch is doing?? obsessed. 😭

To enable a specific LMI type, you connect the corresponding hook (annexA, annexD, or group4) to DLCI 0 or 1023 of a ng_frame_relay(4) node. Typically, Annex A and Annex D live on DLCI 0 while Group-of-four lives on DLCI 1023.

To enable LMI type auto-detection, connect the auto0 hook to DLCI 0 and the auto1023 hook to DLCI 1023. The node will attempt to automatically determine which LMI type is running at the switch, and go into that mode. bestie it literally detects. it's giving detective. πŸ”βœ¨

Only one fixed LMI type, or auto-detection, can be active at any given time. pick a lane, babe. πŸ™ˆ

The NGM_LMI_GET_STATUS control message can be used at any time to query the current status of the LMI protocol and each DLCI channel. This node also supports the NGM_TEXT_STATUS control message.


πŸŽ€ HOOKS πŸŽ€

This node type supports the following hooks:

  • annexA β€” ITU Annex A LMI hook. πŸ’œ
  • annexD β€” ANSI Annex D LMI hook. πŸ’™
  • group4 β€” Group-of-four LMI hook. πŸ’š
  • auto0 β€” Auto-detection hook for DLCI 0. ✨
  • auto1023 β€” Auto-detection hook for DLCI 1023. ✨

five hooks, five little doorways into the node. vibe check: passed. πŸ¦‹


πŸ‘‘ CONTROL MESSAGES πŸ‘‘

This node type supports the generic control messages, plus the following:

  • NGM_LMI_GET_STATUS β€” This command returns status information in a struct nglmistat:
#define NGM_LMI_STAT_ARYSIZE   (1024/8)

struct nglmistat {
  u_char  proto[12];    /* Active proto (same as hook name) */
  u_char  hook[12];     /* Active hook */
  u_char  fixed;        /* If set to fixed LMI mode */
  u_char  autod;        /* If currently auto-detecting */
  u_char  seen[NGM_LMI_STAT_ARYSIZE];   /* DLCIs ever seen */
  u_char  up[NGM_LMI_STAT_ARYSIZE];     /* DLCIs currently up */
};
not me reading that struct like a love letter. proto, hook, fixed, autod, seen, up β€” every field accounted for, no notes. πŸ’–
  • NGM_TEXT_STATUS β€” This generic message returns is a human-readable version of the node status.

(yeah, the original says "returns is" β€” we don't gatekeep typos here, we preserve them. periodt. πŸ’€)


🌈 SHUTDOWN 🌈

This node shuts down upon receipt of a NGM_SHUTDOWN control message, or when all hooks have been disconnected.

so basically: either someone tells it to leave, or everyone abandons it. friendship breakup coded. 😭 the node said "if all y'all gone, i'm gone too." iconic. πŸ’…


πŸ”₯ SEE ALSO πŸ”₯

  • netgraph(4)
  • ng_frame_relay(4)
  • ngctl(8)
  • ANSI T1.617-1991 Annex D.
  • ITU-T Q.933 Digital Subscriber Signaling System No. 1 - Signaling Specification for Frame Mode Basic Call Control, Annex A.

(the standards really said "let us introduce ourselves" and honestly? respected. πŸŽ“)


πŸ¦‹ HISTORY πŸ¦‹

The ng_lmi node type was implemented in FreeBSD 4.0. old money. vintage. classic. πŸ’œ


πŸ’« AUTHORS πŸ’«

Julian Elischer <julian@FreeBSD.org>

shoutout to Julian, fr fr. 🫢


and that's the whole page, bestie β€” you ate this, go configure some frame relay ✨

this was the Debian edition of the ng_lmi(4) manual page, dated November 13, 2012 β€” mwah, take care of her, she's been around a minute. πŸ’–πŸŽ€

πŸ“¦ where this page comes from