Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

socket: Align struct sa_familty to allow safe casting between all sockaddr_* #276

Merged
merged 1 commit into from
Aug 11, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 42 additions & 42 deletions include/sys/socket.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
*
* sys/socket.h
*
* Copyright 2018 Phoenix Systems
* Author: Jan Sikorski, Michal Miroslaw
* Copyright 2018, 2023 Phoenix Systems
* Author: Jan Sikorski, Michal Miroslaw, Aleksander Kaminski
*
* This file is part of Phoenix-RTOS.
*
Expand Down Expand Up @@ -35,37 +35,37 @@
#define PF_KEY AF_KEY
#define PF_PACKET AF_PACKET

#define SOCK_STREAM 1
#define SOCK_DGRAM 2
#define SOCK_RAW 3
#define SOCK_STREAM 1
#define SOCK_DGRAM 2
#define SOCK_RAW 3
#define SOCK_SEQPACKET 4
#define SOCK_RDM 5

#define SOL_SOCKET 0xFFF
#define SO_ACCEPTCONN 0x0002
#define SO_BROADCAST 0x0020
#define SO_DEBUG 0x0001
#define SO_DONTROUTE 0x0010
#define SO_ERROR 0x1007
#define SO_KEEPALIVE 0x0008
#define SO_LINGER 0x0080
#define SO_OOBINLINE 0x0100
#define SO_RCVBUF 0x1002
#define SO_RCVLOWAT 0x1004
#define SO_RCVTIMEO 0x1006
#define SO_REUSEADDR 0x0004
#define SO_SNDBUF 0x1001
#define SO_SNDLOWAT 0x1003
#define SO_SNDTIMEO 0x1005
#define SO_TYPE 0x1008
#define SOCK_RDM 5

#define SOL_SOCKET 0xFFF
#define SO_ACCEPTCONN 0x0002
#define SO_BROADCAST 0x0020
#define SO_DEBUG 0x0001
#define SO_DONTROUTE 0x0010
#define SO_ERROR 0x1007
#define SO_KEEPALIVE 0x0008
#define SO_LINGER 0x0080
#define SO_OOBINLINE 0x0100
#define SO_RCVBUF 0x1002
#define SO_RCVLOWAT 0x1004
#define SO_RCVTIMEO 0x1006
#define SO_REUSEADDR 0x0004
#define SO_SNDBUF 0x1001
#define SO_SNDLOWAT 0x1003
#define SO_SNDTIMEO 0x1005
#define SO_TYPE 0x1008
#define SO_BINDTODEVICE 0x100b

#define MSG_OOB 0x01
#define MSG_PEEK 0x02
#define MSG_OOB 0x01
#define MSG_PEEK 0x02
#define MSG_DONTWAIT 0x08

#define SHUT_RD 0
#define SHUT_WR 1
#define SHUT_RD 0
#define SHUT_WR 1
#define SHUT_RDWR 2

#define SCM_RIGHTS 1
Expand All @@ -76,46 +76,46 @@ extern "C" {
#endif


typedef uint16_t sa_family_t; // match lwIP size: u8 len + u8 family
/* Match lwIP size: u8 len + u8 family. */
typedef uint16_t sa_family_t;


struct sockaddr {
sa_family_t sa_family;
char sa_data[14]; // actual size may be bigger

char sa_data[14]; /* actual size may be bigger */
};


struct sockaddr_storage {
sa_family_t ss_family;
char ss_data[128-sizeof(sa_family_t)];
};
char ss_data[128 - sizeof(sa_family_t)]; /* e.g. struct sockaddr_un needs some space */
} __attribute__((aligned(8))); /* Align to allow safe sockaddr_* casting */


struct linger {
int l_onoff;
int l_linger;
};

// has to be included after sockaddr is defined
/* has to be included after sockaddr is defined */
#include <sys/sockios.h>


struct msghdr {
void *msg_name;
socklen_t msg_namelen;
void *msg_name;
socklen_t msg_namelen;
struct iovec *msg_iov;
int msg_iovlen;
void *msg_control;
socklen_t msg_controllen;
int msg_flags;
int msg_iovlen;
void *msg_control;
socklen_t msg_controllen;
int msg_flags;
};


struct cmsghdr {
socklen_t cmsg_len;
int cmsg_level;
int cmsg_type;
int cmsg_level;
int cmsg_type;
};


Expand Down
Loading