diff options
Diffstat (limited to 'debian/patches/0013-pfinet-make-the-demuxers-payload-aware.patch')
-rw-r--r-- | debian/patches/0013-pfinet-make-the-demuxers-payload-aware.patch | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/debian/patches/0013-pfinet-make-the-demuxers-payload-aware.patch b/debian/patches/0013-pfinet-make-the-demuxers-payload-aware.patch new file mode 100644 index 00000000..7938f283 --- /dev/null +++ b/debian/patches/0013-pfinet-make-the-demuxers-payload-aware.patch @@ -0,0 +1,72 @@ +From ea0ceb8c7b62a4ba8ddabdfb8cb80acbc25106a6 Mon Sep 17 00:00:00 2001 +From: Justus Winter <4winter@informatik.uni-hamburg.de> +Date: Sun, 13 Apr 2014 14:03:48 +0200 +Subject: [PATCH hurd 13/29] 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 | 10 +++++++++- + 2 files changed, 28 insertions(+), 2 deletions(-) + +diff --git a/pfinet/ethernet.c b/pfinet/ethernet.c +index 053fd1b..17967ce 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..e0599bb 100644 +--- a/pfinet/main.c ++++ b/pfinet/main.c +@@ -86,7 +86,15 @@ 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) + { +-- +2.1.3 + |