| 816 | } |
| 817 | |
| 818 | func (msg *BgpMessage) Serialize() ([]byte, error) { |
| 819 | body, err := msg.Body.Serialize() |
| 820 | if err != nil { |
| 821 | return nil, err |
| 822 | } |
| 823 | if msg.Header.Len == 0 { |
| 824 | len := len(body) + BGP_HEADER_LEN |
| 825 | if len > BGP_MAX_PACKET_LEN { |
| 826 | // XXX BGP Internal Error. |
| 827 | return nil, err |
| 828 | } |
| 829 | msg.Header.Len = uint16(len) |
| 830 | } |
| 831 | header, err := msg.Header.Serialize() |
| 832 | if err != nil { |
| 833 | // XXX BGP Internal Error. |
| 834 | return nil, err |
| 835 | } |
| 836 | return append(header, body...), nil |
| 837 | } |
| 838 | |
| 839 | func NewBgpOpenMsg(n *Neighbor) *BgpMessage { |
| 840 | body := &BgpOpen{ |