commit-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[hurd] 49/64: pfinet: make the demuxers payload-aware


From: Samuel Thibault
Subject: [hurd] 49/64: pfinet: make the demuxers payload-aware
Date: Wed, 10 Dec 2014 15:17:07 +0000

This is an automated email from the git hooks/post-receive script.

sthibault pushed a commit to branch upstream
in repository hurd.

commit 2514b693920124eb47eb48f50f07b179bc5090e9
Author: Justus Winter <address@hidden>
Date:   Sun Apr 13 14:03:48 2014 +0200

    pfinet: make the demuxers payload-aware
    
    * pfinet/ethernet.c (ethernet_demuxer): Make the demuxer payload-aware.
    * pfinet/main.c (pfinet_demuxer): Likewise.
---
 pfinet/ethernet.c | 20 +++++++++++++++++++-
 pfinet/main.c     | 12 ++++++++++--
 2 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/pfinet/ethernet.c b/pfinet/ethernet.c
index 053fd1b..1678243 100644
--- a/pfinet/ethernet.c
+++ b/pfinet/ethernet.c
@@ -116,12 +116,30 @@ ethernet_demuxer (mach_msg_header_t *inp,
   int datalen;
   struct ether_device *edev;
   struct device *dev = 0;
+  mach_port_t local_port;
 
   if (inp->msgh_id != NET_RCV_MSG_ID)
     return 0;
 
+  if (MACH_MSGH_BITS_LOCAL (inp->msgh_bits) ==
+      MACH_MSG_TYPE_PROTECTED_PAYLOAD)
+    {
+      struct port_info *pi = ports_lookup_payload (NULL,
+                                                  inp->msgh_protected_payload,
+                                                  NULL);
+      if (pi)
+       {
+         local_port = pi->port_right;
+         ports_port_deref (pi);
+       }
+      else
+       local_port = MACH_PORT_NULL;
+    }
+  else
+    local_port = inp->msgh_local_port;
+
   for (edev = ether_dev; edev; edev = edev->next)
-    if (inp->msgh_local_port == edev->readptname)
+    if (local_port == edev->readptname)
       dev = &edev->dev;
 
   if (! dev)
diff --git a/pfinet/main.c b/pfinet/main.c
index 0f1fbfc..8716fdb 100644
--- a/pfinet/main.c
+++ b/pfinet/main.c
@@ -86,8 +86,16 @@ pfinet_demuxer (mach_msg_header_t *inp,
 
   /* We have several classes in one bucket, which need to be demuxed
      differently.  */
-  pi = ports_lookup_port(pfinet_bucket, inp->msgh_local_port, 
socketport_class);
-  
+  if (MACH_MSGH_BITS_LOCAL (inp->msgh_bits) ==
+      MACH_MSG_TYPE_PROTECTED_PAYLOAD)
+    pi = ports_lookup_payload (pfinet_bucket,
+                              inp->msgh_protected_payload,
+                              socketport_class);
+  else
+    pi = ports_lookup_port (pfinet_bucket,
+                           inp->msgh_local_port,
+                           socketport_class);
+
   if (pi)
     {
       ports_port_deref (pi);

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-hurd/hurd.git



reply via email to

[Prev in Thread] Current Thread [Next in Thread]