Index: gst-plugins-base/gst-libs/gst/netbuffer/gstnetbuffer.h
===================================================================
--- gst-plugins-base.orig/gst-libs/gst/netbuffer/gstnetbuffer.h	2006-09-28 00:20:06.000000000 -0400
+++ gst-plugins-base/gst-libs/gst/netbuffer/gstnetbuffer.h	2006-09-28 00:20:31.000000000 -0400
@@ -61,7 +61,13 @@
     guint8        ip6[16];
     guint32       ip4;
   } address;
+  union {
+    guint8        ip6[16];
+    guint32       ip4;
+  } interface;
   guint16       port;
+  guint8	loopback;
+  guint8	ttl;
   /*< private >*/
   gpointer _gst_reserved[GST_PADDING];
 };
Index: gst-plugins-base/gst-libs/gst/netbuffer/gstnetbuffer.c
===================================================================
--- gst-plugins-base.orig/gst-libs/gst/netbuffer/gstnetbuffer.c	2006-09-28 00:20:06.000000000 -0400
+++ gst-plugins-base/gst-libs/gst/netbuffer/gstnetbuffer.c	2006-09-28 10:51:16.000000000 -0400
@@ -80,6 +80,13 @@
 static void
 gst_netbuffer_init (GTypeInstance * instance, gpointer g_class)
 {
+  GstNetBuffer * nbuf = (GstNetBuffer *) instance;
+
+  /* Default TTL of 1 prevents multicast packets from being forwarded
+   * beyond the local network
+   */
+  nbuf->from.ttl = 1;
+  nbuf->to.ttl = 1;
 }
 
 static void
@@ -140,6 +147,22 @@
 }
 
 /**
+ * gst_netaddress_set_ip4_interface:
+ * @naddr: a multicast network address
+ * @address: an IPv4 network interface for use with multicast
+ *
+ * Set @naddr with the IPv4 @interface to use for multicast
+ */
+void
+gst_netaddress_set_ip4_interface (GstNetAddress * naddr, guint32 interface)
+{
+  g_return_if_fail (naddr != NULL);
+  g_return_if_fail (naddr->type != GST_NET_TYPE_IP4);
+
+  naddr->interface.ip4 = interface;
+}
+
+/**
  * gst_netaddress_set_ip6_address:
  * @naddr: a network address
  * @address: an IPv6 network address.
@@ -159,6 +182,52 @@
 }
 
 /**
+ * gst_netaddress_set_ip6_interface:
+ * @naddr: a multicast network address
+ * @address: an IPv6 network interface for use with multicast
+ *
+ * Set @naddr with the IPv6 @interface to use for multicast
+ */
+void
+gst_netaddress_set_ip6_interface (GstNetAddress * naddr, guint8 interface[16])
+{
+  g_return_if_fail (naddr != NULL);
+  g_return_if_fail (naddr->type != GST_NET_TYPE_IP6);
+
+  memcpy (&naddr->interface.ip6, interface, 16);
+}
+
+/**
+ * gst_netaddress_set_loopback;
+ * @naddr: a multicast network address
+ * @loopbak: set to 1 to enable loopback or 0 to disable it.
+ *
+ * Set @naddr loopback option for multicast address
+ */
+void
+gst_netaddress_set_loopback (GstNetAddress * naddr, guint8 loopback)
+{
+  g_return_if_fail (naddr != NULL);
+
+  naddr->loopback = loopback;
+}
+
+/**
+ * gst_netaddress_set_ttl;
+ * @naddr: a multicast network address
+ * @ttl: Set time-to-live for multicast packets (0 to 255)
+ *
+ * Set @naddr TTL for multicats packets.  Defaults to 1 to stay on the local network.
+ */
+void
+gst_netaddress_set_ttl (GstNetAddress * naddr, guint8 ttl)
+{
+  g_return_if_fail (naddr != NULL);
+
+  naddr->ttl = ttl;
+}
+
+/**
  * gst_netaddress_get_net_type:
  * @naddr: a network address
  *
@@ -202,6 +271,29 @@
 }
 
 /**
+ * gst_netaddress_get_ip4_interface:
+ * @naddr: a multicast network address
+ * @interface: a location to store the interface address.
+ *
+ * Get the IPv4 interface stored in @naddr into @interface.
+ *
+ * Returns: TRUE if the interface could be retrieved.
+ */
+gboolean
+gst_netaddress_get_ip4_interface (GstNetAddress * naddr, guint32 * interface)
+{
+  g_return_val_if_fail (naddr != NULL, FALSE);
+
+  if (naddr->type != GST_NET_TYPE_IP4)
+    return FALSE;
+
+  if (interface)
+    *interface = naddr->interface.ip4;
+
+  return TRUE;
+}
+
+/**
  * gst_netaddress_get_ip6_address:
  * @naddr: a network address
  * @address: a location to store the result.
@@ -227,3 +319,66 @@
 
   return TRUE;
 }
+
+/**
+ * gst_netaddress_get_ip6_interface:
+ * @naddr: a multicast network address
+ * @interface: a location to store the interface address.
+ *
+ * Get the IPv6 interface stored in @naddr into @interface.
+ *
+ * Returns: TRUE if the interface could be retrieved.
+ */
+gboolean
+gst_netaddress_get_ip6_interface (GstNetAddress * naddr, guint8 interface[16])
+{
+  g_return_val_if_fail (naddr != NULL, FALSE);
+
+  if (naddr->type != GST_NET_TYPE_IP6)
+    return FALSE;
+
+  if (interface)
+    memcpy (interface, naddr->interface.ip6, 16);
+
+  return TRUE;
+}
+
+/**
+ * gst_netaddress_get_loopback:
+ * @naddr: a multicast network address
+ * @loopback: a location to store the value of loopback
+ *
+ * Get whether ot not multicast loopback is enabled
+ *
+ * Returns: TRUE if the interface could be retrieved.
+ */
+gboolean
+gst_netaddress_get_loopback (GstNetAddress * naddr, guint8 * loopback)
+{
+  g_return_val_if_fail (naddr != NULL, FALSE);
+
+  if (loopback)
+    *loopback = naddr->loopback;
+
+  return TRUE;
+}
+
+/**
+ * gst_netaddress_get_ttl:
+ * @naddr: a multicast network address
+ * @ttl: a location to store the value of ttl
+ *
+ * Get the time-to-live value for multicast packets
+ *
+ * Returns: TRUE if the interface could be retrieved.
+ */
+gboolean
+gst_netaddress_get_ttl (GstNetAddress * naddr, guint8 * ttl)
+{
+  g_return_val_if_fail (naddr != NULL, FALSE);
+
+  if (ttl)
+    *ttl = naddr->ttl;
+
+  return TRUE;
+}
