]> git.proxmox.com Git - mirror_frr.git/blobdiff - lib/sockunion.h
Add user `frr` into group `frrvty`
[mirror_frr.git] / lib / sockunion.h
index e66b0b8e83d6674cc10a7b9810c80b7cbb004233..3af3d78059095b0c37ecd5f12fc3b323339c6e5a 100644 (file)
 #define _ZEBRA_SOCKUNION_H
 
 #include "privs.h"
-
-#if 0
-union sockunion {
-  struct sockinet {
-    u_char si_len;
-    u_char si_family;
-    u_short si_port;
-  } su_si;
-  struct sockaddr_in  su_sin;
-  struct sockaddr_in6 su_sin6;
-};
-#define su_len                su_si.si_len
-#define su_family     su_si.si_family
-#define su_port               su_si.si_port
-#endif /* 0 */
+#include "if.h"
+#ifdef __OpenBSD__
+#include <netmpls/mpls.h>
+#endif
 
 union sockunion 
 {
   struct sockaddr sa;
   struct sockaddr_in sin;
-#ifdef HAVE_IPV6
   struct sockaddr_in6 sin6;
-#endif /* HAVE_IPV6 */
+#ifdef __OpenBSD__
+  struct sockaddr_mpls smpls;
+#endif
 };
 
 enum connect_result
@@ -86,11 +76,16 @@ enum connect_result
 
 /* Prototypes. */
 extern int str2sockunion (const char *, union sockunion *);
-extern const char *sockunion2str (union sockunion *, char *, size_t);
-extern int sockunion_cmp (union sockunion *, union sockunion *);
+extern const char *sockunion2str (const union sockunion *, char *, size_t);
+extern int sockunion_cmp (const union sockunion *, const union sockunion *);
 extern int sockunion_same (const union sockunion *, const union sockunion *);
 extern unsigned int sockunion_hash (const union sockunion *);
 
+extern size_t family2addrsize(int family);
+extern size_t sockunion_get_addrlen(const union sockunion *);
+extern const u_char *sockunion_get_addr(const union sockunion *);
+extern void sockunion_set(union sockunion *, int family, const u_char *addr, size_t bytes);
+
 extern union sockunion *sockunion_str2su (const char *str);
 extern int sockunion_accept (int sock, union sockunion *);
 extern int sockunion_stream_socket (union sockunion *);
@@ -103,27 +98,15 @@ extern int sockopt_ttl (int family, int sock, int ttl);
 extern int sockopt_minttl (int family, int sock, int minttl);
 extern int sockopt_cork (int sock, int onoff);
 extern int sockopt_mark_default(int sock, int mark, struct zebra_privs_t *);
-extern int sockunion_socket (union sockunion *su);
-extern const char *inet_sutop (union sockunion *su, char *str);
-extern enum connect_result sockunion_connect (int fd, union sockunion *su, 
+extern int sockunion_socket (const union sockunion *su);
+extern const char *inet_sutop (const union sockunion *su, char *str);
+extern enum connect_result sockunion_connect (int fd, const union sockunion *su, 
                                               unsigned short port,
-                                              unsigned int);
+                                              ifindex_t);
 extern union sockunion *sockunion_getsockname (int);
 extern union sockunion *sockunion_getpeername (int);
-extern union sockunion *sockunion_dup (union sockunion *);
+extern union sockunion *sockunion_dup (const union sockunion *);
 extern void sockunion_free (union sockunion *);
-
-#ifndef HAVE_INET_NTOP
-extern const char * inet_ntop (int family, const void *addrptr, 
-                               char *strptr, size_t len);
-#endif /* HAVE_INET_NTOP */
-
-#ifndef HAVE_INET_PTON
-extern int inet_pton (int family, const char *strptr, void *addrptr);
-#endif /* HAVE_INET_PTON */
-
-#ifndef HAVE_INET_ATON
-extern int inet_aton (const char *cp, struct in_addr *inaddr);
-#endif
+extern void sockunion_init (union sockunion *);
 
 #endif /* _ZEBRA_SOCKUNION_H */