SNMP: TRAP
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.