[klee-commits] [1498] Skeleton files for socket models.

cristic at stanford.edu cristic at stanford.edu
Fri Mar 13 16:14:24 PDT 2009


Revision: 1498
          http://keeda.stanford.edu/viewvc/viewvc.cgi?view=rev&revision=1498
Author:   cristic
Date:     2009-03-13 16:14:24 -0700 (Fri, 13 Mar 2009)
Log Message:
-----------
Skeleton files for socket models.

Added Paths:
-----------
    models/simple/sockets.c
    models/simple/sockets.h

Added: models/simple/sockets.c
===================================================================
--- models/simple/sockets.c	                        (rev 0)
+++ models/simple/sockets.c	2009-03-13 23:14:24 UTC (rev 1498)
@@ -0,0 +1,91 @@
+#include "sockets.h"
+
+#include <linux/net.h>
+#include <errno.h>
+#include <unistd.h>
+#include <stdio.h>
+
+void klee_warning(const char*);
+void klee_warning_once(const char*);
+int klee_get_errno(void);
+
+int __socketcall(int type, int *args) __attribute__((weak));
+int __socketcall(int type, int *args) {
+  switch (type) {
+  case SYS_SOCKET:
+    return __fd_socket(args[0], args[1], args[2]);
+  case SYS_BIND:
+    return __fd_bind(args[0], (const struct sockaddr *)args[1], args[2]);
+  case SYS_CONNECT:
+    return __fd_connect(args[0], (const struct sockaddr *)args[1], args[2]);
+  case SYS_LISTEN:
+    return __fd_listen(args[0], args[1]);
+  case SYS_ACCEPT:
+    return __fd_accept(args[0], (struct sockaddr *)args[1], (socklen_t *)args[2]);
+  case SYS_GETSOCKNAME:
+  case SYS_GETPEERNAME:
+  case SYS_SOCKETPAIR:
+    break;
+  case SYS_SEND:
+    return __fd_send(args[0], (const void *)args[1], (size_t)args[2], args[3]);
+  case SYS_RECV:
+    return __fd_recv(args[0], (void *)args[1], (size_t)args[2], args[3]);
+  case SYS_SENDTO:
+  case SYS_RECVFROM:
+    break;
+  case SYS_SHUTDOWN:
+    return __fd_shutdown(args[0], args[1]);
+  case SYS_SETSOCKOPT:
+    klee_warning("ignoring setsockopt");
+    return 0;
+  case SYS_GETSOCKOPT:
+    klee_warning("ignoring getsockopt");
+    return 0;
+  case SYS_SENDMSG:
+  case SYS_RECVMSG:
+    break;
+  }
+  printf("__socketcall(type=%d: unknown): errno=ENOSYS\n", type);
+  errno = ENOSYS;
+  return -1;
+}
+
+
+int __fd_socket(int domain, int type, int protocol) {
+  return -1;
+}
+
+
+int __fd_bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen) {
+  return 0;
+}
+
+int __fd_connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen) {
+  return 0;
+}
+
+int __fd_listen(int sockfd, int backlog) {
+  return 0;
+}
+
+int __fd_accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen) {
+  return 0;
+}
+
+int __fd_shutdown(int fd, int how) {
+  return 0;
+}
+
+ssize_t __fd_recv(int fd, void *buf, size_t len, int flags)
+{
+  if (flags != 0)
+    klee_warning("recv: flags is not zero, ignoring");
+  return read(fd, buf, len);
+}
+
+ssize_t __fd_send(int fd, const void *buf, size_t len, int flags)
+{
+  if (flags != 0)
+    klee_warning("send: flags is not zero, ignoring");
+  return write(fd, buf, len);
+}

Added: models/simple/sockets.h
===================================================================
--- models/simple/sockets.h	                        (rev 0)
+++ models/simple/sockets.h	2009-03-13 23:14:24 UTC (rev 1498)
@@ -0,0 +1,17 @@
+#ifndef __EXE_SOCKETS__
+#define __EXE_SOCKETS__
+
+#include <sys/types.h> 
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+int __fd_socket(int domain, int type, int protocol);
+int __fd_bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
+int __fd_connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);
+int __fd_listen(int sockfd, int backlog);
+int __fd_accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
+int __fd_shutdown(int sockfd, int how);
+ssize_t __fd_recv(int fd, void *buf, size_t len, int flags);
+ssize_t __fd_send(int fd, const void *buf, size_t len, int flags);
+
+#endif
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://keeda.Stanford.EDU/pipermail/klee-commits/attachments/20090313/13d78133/attachment.html 


More information about the klee-commits mailing list