+thread_t thread;
+
+static void read_thread(void *arg) {
+ static vpn_packet_t packet;
+ errno = 0;
+
+ while(true) {
+ if(read_packet(&packet)) {
+ mutex_lock(&mutex);
+ route(myself, &packet);
+ mutex_unlock(&mutex);
+ } else {
+ if(errno == EAGAIN || errno == EINTR) {
+ errno = 0;
+ continue;
+ }
+
+ return;
+ }
+ }
+}
+