프로젝트 소개

bgp 패키지는 RFC 4271 및 관련 RFC에 기술된 경계 경로 프로토콜 버전 4(BGP-4)를 구현하며, 와이어 포맷, 유한 상태 기계, 피어링 수명 주기를 다룹니다. MIT 라이선스로 배포되며 Go로 작성되었습니다. 이 라이브러리는 계층 구조로 구성되어 있으며, 각 계층은 상위 계층 없이도 사용할 수 있습니다: - Open, Update, Notification 등의 메시지 타입과 이들의 바이너리 인코딩. - 연결 위에서 메시지를 프레이밍하는 Conn. - Conn 위에서 RFC 4271 유한 상태 기계를 실행하는 FSM: Connect 호출당 한 번의 세션 시도를 수행하며, 핸들러에 제로카피 대여 값을 전달합니다. - FSM을 재시도 루프와 완전히 소유된 값을 갖는 핸들러로 감싸는 Peer. - 공유 리스너에서 연결을 수락하며 다수의 Peer를 조정하는 Server. 대부분의 호출자는 Peer 또는 Server를 사용할 것으로 예상되며, FSM은 제로카피 전달이나 사용자 정의 재시도 정책이 필요한 호출자를 위한 전문가용 계층입니다. README에는 이웃에게 하나의 경로를 알리고 수신한 경로를 로깅하는 예제 스피커가 나와 있습니다. Run은 연결 수명 주기를 관리합니다: 다이얼링, OPEN 교환, 킵얼라이브, 그리고 컨텍스트가 취소될 때까지 죽은 세션 재시도. 컨텍스트를 취소하면 Cease / Administrative Shutdown이 전송됩니다. 패키지 예제는 다중 프로토콜 IPv6, 듀얼 스택, 수동 피어, 그리고 강화된 인터넷 대면 구성을 다룹니다. 범위는 의도적으로 제한되어 있습니다: 라우팅 테이블과 정책 엔진은 영구적으로 존재하지 않습니다. 확립된 세션은 수신한 UPDATE 메시지를 호출자에게 전달하며, 모든 라우팅 결정은 호출자가 소유합니다. RIB는 핸들러를 통해 Peer 계층에 연결되며, 각 PeerConfig에 메서드를 배선하고 전송 경로를 통해 Adj-RIB-Out을 소진합니다. BMP(RFC 7854) 모니터링과 BFD(RFC 5880) 라이브니스 같은 동반 프로젝트는 동일한 접점 위에 구축되며 별도 저장소에 있습니다. 플랫폼 지원: 메시지, Conn, FSM, Peer, Server 계층은 이식 가능한 Go입니다. 프로덕션 BGP 스피커에 필요한 TCP 소켓 옵션인 TCP-MD5, GTSM, DSCP는 Linux에서만 지원되며, 다른 곳에서 설정하면 errors.ErrUnsupported를 감싸는 오류와 함께 실패합니다. 테스트는 실제 인터넷 라우팅 데이터와 실제 라우터를 대상으로 수행됩니다: 코퍼스 테스트는 라우트 수집기 아카이브의 모든 메시지와 전체 인터넷 테이블의 모든 경로를 파싱하며, 바이트 단위의 마샬 왕복을 요구합니다. 퍼즈 타깃은 메시지 파싱, 속성 파싱, 연결 프레이밍을 다루며 코퍼스에서 시드를 받습니다. 그리고 상호운용성 하네스는 FRRouting을 대상으로 라이브 세션을 실행하여 설정, 기능 협상, 경로 교환, TCP-MD5, GTSM을 다룹니다.