- if (unlikely(addr_len < sizeof(struct sockaddr_mptp))) {
- log_error("Invalid size for sockaddr\n");
+ if (unlikely(addr_len < sizeof(struct sockaddr_mptp) + sizeof(struct mptp_dest))) {
+ log_error("Invalid size for sockaddr (%d)\n", addr_len);
- port = mptp_addr->dests[0].port;
+ log_debug("Bind received port=%u (network order)\n", mptp_addr->dests[0].port);
+ port = ntohs(mptp_addr->dests[0].port);
+ if (port == 0)
+ port = get_next_free_port();
if (unlikely(port == 0 || port >= MAX_MPTP_PORT)) {
log_error("Invalid value for sockaddr port (%u)\n", port);
if (unlikely(port == 0 || port >= MAX_MPTP_PORT)) {
log_error("Invalid value for sockaddr port (%u)\n", port);
if (unlikely(ssk->dst == 0 || ssk->dst >= MAX_MPTP_PORT)) {
log_error("Invalid value for destination port(%u)\n", ssk->dst);
err = -EINVAL;
if (unlikely(ssk->dst == 0 || ssk->dst >= MAX_MPTP_PORT)) {
log_error("Invalid value for destination port(%u)\n", ssk->dst);
err = -EINVAL;
static int mptp_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len)
{
int err;
static int mptp_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len)
{
int err;
if (unlikely(dport == 0 || dport >= MAX_MPTP_PORT)) {
log_error("Invalid value for destination port(%u)\n", dport);
err = -EINVAL;
if (unlikely(dport == 0 || dport >= MAX_MPTP_PORT)) {
log_error("Invalid value for destination port(%u)\n", dport);
err = -EINVAL;
payload = skb_put(skb, len);
log_debug("payload=%p\n", payload);
payload = skb_put(skb, len);
log_debug("payload=%p\n", payload);
log_debug("Trying to receive sock=%p sk=%p flags=%d\n", sock, sk, flags);
log_debug("Trying to receive sock=%p sk=%p flags=%d\n", sock, sk, flags);
struct sockaddr_mptp * mptp_addr;
int err;
int addr_size = sizeof(struct sockaddr_mptp) + sizeof(struct mptp_dest);
struct sockaddr_mptp * mptp_addr;
int err;
int addr_size = sizeof(struct sockaddr_mptp) + sizeof(struct mptp_dest);
if (unlikely(src == 0 || dst == 0 || src >= MAX_MPTP_PORT || dst >= MAX_MPTP_PORT)) {
log_error("Malformed packet (src=%u, dst=%u)\n", shdr->src, shdr->dst);
goto drop;
if (unlikely(src == 0 || dst == 0 || src >= MAX_MPTP_PORT || dst >= MAX_MPTP_PORT)) {
log_error("Malformed packet (src=%u, dst=%u)\n", shdr->src, shdr->dst);
goto drop;