def METHOD_NAME(p, include_options=True, sne=0):
    # type: (Packet, bool, int) -> bytes
    """Build message bytes as described by RFC5925 section 5.1"""
    result = bytearray()
    result += struct.pack("!I", sne)
    result += tcp_pseudoheader(p[TCP])
    # tcp header with checksum set to zero
    th_bytes = bytes(p[TCP])
    result += th_bytes[:16]
    result += b"\x00\x00"
    result += th_bytes[18:20]
    # Even if include_options=False the TCP-AO option itself is still included
    # with the MAC set to all-zeros. This means we need to parse TCP options.
    pos = 20
    th = p[TCP]
    doff = th.dataofs
    if doff is None:
        opt_len = len(th.get_field("options").i2m(th, th.options))
        doff = 5 + ((opt_len + 3) // 4)
    tcphdr_optend = doff * 4
    while pos < tcphdr_optend:
        optnum = orb(th_bytes[pos])
        pos += 1
        if optnum == 0 or optnum == 1:
            if include_options:
                result += bytearray([optnum])
            continue
        optlen = orb(th_bytes[pos])
        pos += 1
        if pos + optlen - 2 > tcphdr_optend:
            logger.info("bad tcp option %d optlen %d beyond end-of-header",
                        optnum, optlen)
            break
        if optlen < 2:
            logger.info("bad tcp option %d optlen %d less than two",
                        optnum, optlen)
            break
        if optnum == 29:
            if optlen < 4:
                logger.info("bad tcp option %d optlen %d", optnum, optlen)
                break
            result += th_bytes[pos - 2: pos + 2]
            result += (optlen - 4) * b"\x00"
        elif include_options:
            result += th_bytes[pos - 2: pos + optlen - 2]
        pos += optlen - 2
    result += bytes(p[TCP].payload)
    return result