diff options
Diffstat (limited to 'eth-multiplexer/vdev.c')
-rw-r--r-- | eth-multiplexer/vdev.c | 35 |
1 files changed, 15 insertions, 20 deletions
diff --git a/eth-multiplexer/vdev.c b/eth-multiplexer/vdev.c index 7d5390b2..367623d9 100644 --- a/eth-multiplexer/vdev.c +++ b/eth-multiplexer/vdev.c @@ -193,29 +193,13 @@ destroy_vdev (void *port) destroy_filters (&vdev->port_list); } +static int deliver_msg (struct net_rcv_msg *msg, struct vether_device *vdev); + /* Broadcast the packet to all virtual interfaces * except the one the packet is from */ int broadcast_pack (char *data, int datalen, struct vether_device *from_vdev) { - int internal_deliver_pack (struct vether_device *vdev) - { - /* Skip current interface. */ - if (from_vdev == vdev) - return 0; - /* Skip interfaces that are down. */ - if ((vdev->if_flags & IFF_UP) == 0) - return 0; - return deliver_pack (data, datalen, vdev); - } - - return foreach_dev_do (internal_deliver_pack); -} - -/* Create a message, and deliver it. */ -int -deliver_pack (char *data, int datalen, struct vether_device *vdev) -{ struct net_rcv_msg msg; int pack_size; struct ethhdr *header; @@ -236,7 +220,18 @@ deliver_pack (char *data, int datalen, struct vether_device *vdev) packet->length = pack_size + sizeof (struct packet_header); msg.packet_type.msgt_number = packet->length; - return deliver_msg (&msg, vdev); + int internal_deliver_pack (struct vether_device *vdev) + { + /* Skip current interface. */ + if (from_vdev == vdev) + return 0; + /* Skip interfaces that are down. */ + if ((vdev->if_flags & IFF_UP) == 0) + return 0; + return deliver_msg (&msg, vdev); + } + + return foreach_dev_do (internal_deliver_pack); } /* Broadcast the message to all virtual interfaces. */ @@ -265,7 +260,7 @@ broadcast_msg (struct net_rcv_msg *msg) * Deliver the message to all right pfinet servers that * connects to the virtual network interface. */ -int +static int deliver_msg(struct net_rcv_msg *msg, struct vether_device *vdev) { mach_msg_return_t err; |