SNMP: TRAP

Verze z 8. 8. 2021, 15:49, kterou vytvořil Adamn (diskuse | příspěvky) (Založena nová stránka s textem „__NOTOC__ == TRAP zprávy == SNMP protokol, který je podporován všemi zařízeními SDS, poskytuje i možnost odeslání tzv. TRAP zprávy ze zařízen…“)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)

TRAP zprávy

SNMP protokol, který je podporován všemi zařízeními SDS, poskytuje i možnost odeslání tzv. TRAP zprávy ze zařízení SDS. Tato zpráva se typicky odesílá, pokud je splněna nějaká uživatelem určená podmínka (příklad: teplota čidla překročí X stupňů).

Protože se jedná o zcela univerzální funkci, zapisuje si podmínky pro odeslání TRAP zprávy uživatel sám, a to prostřednictvím svého programu v rámci SDS.

Návod je rozdělen pro SDS která používají SDS-C a nebo FULL-C programovací jazyk.


SDS-C

Odeslání SNMP TRAP zprávy je závislé na vašem uživatelském SDS-C programu, který právě představuje rozhodovací logiku (např. zmíněné hlídání překročení teploty). Pokud se SDS-C program rozhodne odeslat TRAP, zavolá specifickou SDS-C funkci snmp_send_trap() (viz zde). Tato funkce má jako parametry cílovou IP adresu, "PDU Specific" hodnotu (toto je namapováno na konkrétní OID) a index do tabulky, pokud je potřebný (pokud OID představuje řádek MIB tabulky).

Každé zařízení SDS podporuje různý seznam TRAP zpráv (závisí to na hardwarové konfiguraci zařízení).

Každá TRAP zpráva obsahuje v sobě tyto položky:

  • "Enterprises" - výchozí OID určující zařízení SDS (konstanta)
  • "PDU Specific" číslo (někde taky jako "TRAP INDEX") - toto je mapováno na konkrétní OID položky
  • "Table Index" číslo - pro položky v SNMP tabulce, kde je stejný výchozí OID, ale tabulkový index (řádek) se liší
  • Identifikace odesílatele (konkrétní zařízení SDS - tj. IP adresa)
  • Aktuální hodnotu (např. teplota čidla) - tato hodnota je vyplněna přímo zařízením SDS, v okamžiku odeslání TRAPu

Aktuální hodnota je zvolena podle vybraného OID (tj. OID které je v TRAP zprávě), a formát aktuální hodnoty odpovídá přesně tomu, co by vrátilo SNMP GET.

Tyto položky jsou vyhodnoceny na straně příjemce, a následně je vyvolána specifická akce (to už je na vás).

SDS-C: Postup

Postup odeslání TRAP zprávy:

1. SDS-C program vyhodnotí podmínky a rozhodne se odeslat TRAP zprávu
2. SDS-C program zavolá funkci snmp_send_trap() přičemž správně vyplní parametry funkce (cílovou IP adresu a TRAP INDEX)
3. SDS sestaví TRAP zprávu, přičemž podle vybraného "PDU Specific" a "Table Index", do zprávy vyplní hodnotu platnou v tomto okamžiku
4. SDS se pokusí odeslat TRAP zprávu (pokud není ARP záznam, odeslání je odloženo, a místo toho se pošle ARP dotaz)
5. Příjemce přijme TRAP zprávu a zpracuje ji.

Příklad

Nejprve je potřeba vědět, jaký vůbec TRAP chceme odeslat.

Pro tento příklad použijeme SDS-MICRO-LM a vybereme si teplotu z druhého 1-W čidla.

Ve OID tabulce pro dané SDS si najdeme správný řádek:

Full OID TRAP INDEX OID Type MIB Name Description
                                         
.... .... .... .... ....
.1.3.6.1.4.1.33283.1.2.6.1.5.2 304 [2] Integer sdsDS18B20actualTempCompleteMul100.2 (RO) Teplota*100 pro 1-W čidlo na sběrnici A na
pozici 2
.... .... .... .... ....

A pro sdsDS18B20actualTempCompleteMul100.2 je odpovídající TRAP INDEX (PDU SPECIFIC) = 304 (hodnota před hranatými závorkami) a TRAP TABLE INDEX = 2 (hodnota v hranatých závorkách). Tyto údaje lze také zjistit z MIB souboru pro dané zařízení.

Program v SDS-C tak zavolá funkci s těmito parametry:

 // ip1, ip2, ip3, ip4 => IP adresa cílového stroje (TRAP RECEIVER)
 // PDU SPECIFIC (TRAP INDEX) = 304
 // TABLE INDEX = 2 
 snmp_send_trap(ip1, ip2, ip3, ip4, 304, 2);

Samozřejmě tato funkce se musí zavolat jen jednou pro odeslání TRAPu. Logika chování je už na programátorovi konkrétního SDS-C programu.

Některé položky mají TABLE INDEX = 0. To znamená, že se jedná o SNMP OID položku která není v tabulce, tj. která existuje jen jako jediná pro daný OID. V tomto případě použijte číslo nula na pozici TABLE INDEX.


FULL-C

Princip je zcela stejný jako pro SDS-C (viz výše), použijete však odpovídající funkce viz návod FULL-C:_snmp_functions.