2014-12-10 9 views
1

Xilinx SDK에서 LWIP 라이브러리를 사용하는 장치에 SNMP 에이전트를 구현하려고합니다.LWIP를 사용하여 SNMP 에이전트에서 전송할 수있는 최대 옥텟 문자열 길이

에이전트를 성공적으로 구현했으며 내 장치에서 실행중인 에이전트가 명령 (snmpget, snmpset, snmpwalk)에 응답하도록했습니다.

그러나 OID가 길이가 255보다 큰 옥텟 문자열을 반환해야하는 경우 에이전트는 의심스러운 방식으로 동작합니다. 길이가 255를 넘는 8 진수 문자열을 전달하려고하면 해당 oid에 대한 데이터가 수신되지 않고 에이전트는 연결이 끊어지고 임의의 furthur 명령에 대한 응답을하지 않습니다.

길이가 < 인 snmp 옥텟 문자열이 문제없이 (아무런 문제없이) 올바르게 수신되었습니다 .. LWIP SNMP 에이전트는 옥텟 문자열의 크기에 제한이 있습니까 .. ?? 옥텟 스트링으로 정의

+1

MIB에서 정의 된 개체의 데이터 유형은 무엇입니까? – Tanner

+0

OCTET STRING으로 정의됩니다. – mano49j

답변

1

개체는 전형적으로 교대로 255 바이트로 제한된다

SYNTAX    DisplayString 

을 DisplayString 같은 것을 이용하여, 직접, 255 바이트 간접적

SYNTAX    OCTET STRING (SIZE (0..255)) 

또는 제한된다.

DisplayString ::= TEXTUAL-CONVENTION 
    DISPLAY-HINT   "255a" 
    STATUS    current 
    DESCRIPTION   "Represents textual information taken from the NVT ASCII..." 
    SYNTAX    OCTET STRING (SIZE (0..255)) 

RFC 25782579를 살펴 보자. 더 큰 크기의 객체를 정의 할 수 있지만 SNMP는 많은 양의 데이터를 전송하지 않습니다.

+0

나는 당신과 동의 .. 하지만 내 MIB에 지정된 제한이 없었다. 내 문제는, 크기 300의 데이터를 보내려고 할 때, 프로그램은 그것을 44 (300-256)로 읽고 옥텟 문자열의 44 문자 만 읽거나 표시하고 있습니다. 문제는 MIB 및 LWIP 라이브러리 코드와 관련이 없습니다. u가 이미 LWIP 라이브러리를 사용하고 OCTET String> 255를 전송할 수 있는지 알려주십시오. – mano49j

1

해결책을 찾았습니다 ... !!!

src \ lwip-1.4.0 \ src \ core \ snmp \ msg_in.c 파일에 있습니다.이 메시지는 들어오는 메시지를 처리하여 문자열 길이를 u16_t에서 u8_t로 변환합니다. 범위가 이제는 (0-255)로 사용되지 않음을 나타냅니다. 그래서 문제.

나는 길이가 255를 초과하는 옥텟 문자열을 처리하는 것을 제한하는 u8_t를 u16_t로 변경했습니다.

이제 LWIP 도서관은 .. 길이> 255의 메시지를 처리 ​​할 수 ​​

감사합니다 ..!

+0

이 링크를 클릭하면 문제에 대해 자세히 알 수 있습니다 ... !! https://savannah.nongnu.org/bugs/?43790 – mano49j