]> xenbits.xensource.com Git - unikraft/libs/lwip.git/commitdiff
Implement getsockname(), getperrname() and sock options
authorSharan Santhanam <sharan.santhanam@neclab.eu>
Wed, 13 Jun 2018 00:26:33 +0000 (02:26 +0200)
committerSimon Kuenzer <simon.kuenzer@neclab.eu>
Fri, 15 Jun 2018 01:21:07 +0000 (03:21 +0200)
Signed-off-by: Sharan Santhanam <sharan.santhanam@neclab.eu>
socket_glue.c

index 77cc34ea8242cc54a70d29eff1a8588a415c9a35..e7dc33cb23fc207c31bea247ddd570395805a770 100644 (file)
@@ -240,19 +240,48 @@ EXIT:
 int getpeername(int s, struct sockaddr *name, socklen_t *namelen)
 {
        int ret = 0;
+       struct sock_net_file *file = NULL;
+       file = sock_net_file_get(s);
+       if(PTRISERR(file)) {
+               uk_printd(DLVL_ERR, "failed to identify the socket\n");
+               ret = -1;
+               SOCK_NET_SET_ERRNO(PTR2ERR(file));
+               goto EXIT;
+       }
+       ret = lwip_getpeername(file->sock_fd, name, namelen);
+EXIT:
        return ret;
 }
 
 int getsockname(int s, struct sockaddr *name, socklen_t *namelen)
 {
        int ret = 0;
+       struct sock_net_file *file = NULL;
+       file = sock_net_file_get(s);
+       if(PTRISERR(file)) {
+               uk_printd(DLVL_ERR, "failed to identify the socket\n");
+               ret = -1;
+               SOCK_NET_SET_ERRNO(PTR2ERR(file));
+               goto EXIT;
+       }
+       ret = lwip_getsockname(file->sock_fd, name, namelen);
+EXIT:
        return ret;
 }
 
-int getsockopt(int s, int level, int optname, void *optval, socklen_t
-               *optlen)
+int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen)
 {
        int ret = 0;
+       struct sock_net_file *file = NULL;
+       file = sock_net_file_get(s);
+       if(PTRISERR(file)) {
+               uk_printd(DLVL_ERR, "failed to identify the socket descriptor \n");
+               ret = -1;
+               SOCK_NET_SET_ERRNO(PTR2ERR(file));
+               goto EXIT;
+       }
+       ret = lwip_getsockopt(file->sock_fd, level, optname, optval, optlen);
+EXIT:
        return ret;
 }
 
@@ -260,6 +289,16 @@ int setsockopt (int s, int level, int optname, const void *optval,
                socklen_t optlen)
 {
        int ret = 0;
+       struct sock_net_file *file = NULL;
+       file = sock_net_file_get(s);
+       if(PTRISERR(file)) {
+               uk_printd(DLVL_ERR, "failed to identify the socket descriptor \n");
+               ret = -1;
+               SOCK_NET_SET_ERRNO(PTR2ERR(file));
+               goto EXIT;
+       }
+       ret = lwip_setsockopt(file->sock_fd, level, optname, optval, optlen);
+EXIT:
        return ret;
 }
 
@@ -380,6 +419,7 @@ EXIT:
 int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set
                *exceptset, struct timeval *timeout)
 {
-       int ret = -ENOTSUP;
+       int ret = -1;
+       SOCK_NET_SET_ERRNO(-ENOTSUP);
        return ret;
 }