diff --git a/platform/linux-generic/include/api/odp_buffer.h b/platform/linux-generic/include/api/odp_buffer.h
index d8577fd..aeb75ed 100644
--- a/platform/linux-generic/include/api/odp_buffer.h
+++ b/platform/linux-generic/include/api/odp_buffer.h
@@ -28,8 +28,34 @@ extern "C" {
  */
 typedef uint32_t odp_buffer_t;
 
-#define ODP_BUFFER_INVALID (0xffffffff) /**< Invalid buffer */
+/**
+* ODP buffer segment
+*/
+typedef uint32_t odp_buffer_segment_t;
 
+/**
+* ODP buffer type
+*/
+typedef enum odp_buffer_type {
+	ODP_BUFFER_TYPE_INVALID = -1,	/**< Buffer type invalid */
+	ODP_BUFFER_TYPE_ANY = 0,	/**< Buffer that can hold any other
+					buffer type */
+	ODP_BUFFER_TYPE_RAW = 1,	/**< Raw buffer,
+					no additional metadata */
+	ODP_BUFFER_TYPE_PACKET = 2,	/**< Packet buffer */
+	ODP_BUFFER_TYPE_TIMEOUT = 3	/**< Timeout buffer */
+} odp_buffer_type_e;
+
+/**
+* ODP buffer options
+*/
+typedef enum odp_buffer_opts {
+	ODP_BUFFER_OPTS_NONE,
+	ODP_BUFFER_OPTS_UNSEGMENTED
+} odp_buffer_opts_e;
+
+#define ODP_BUFFER_INVALID (0xffffffff) /**< Invalid buffer */
+#define ODP_SEGMENT_INVALID (0xffffffff) /**< Invalid segment */
 
 /**
  * Buffer start address
@@ -58,14 +84,6 @@ size_t odp_buffer_size(odp_buffer_t buf);
  */
 int odp_buffer_type(odp_buffer_t buf);
 
-#define ODP_BUFFER_TYPE_INVALID (-1) /**< Buffer type invalid */
-#define ODP_BUFFER_TYPE_ANY       0  /**< Buffer that can hold any other
-					  buffer type */
-#define ODP_BUFFER_TYPE_RAW       1  /**< Raw buffer, no additional metadata */
-#define ODP_BUFFER_TYPE_PACKET    2  /**< Packet buffer */
-#define ODP_BUFFER_TYPE_TIMEOUT   3  /**< Timeout buffer */
-
-
 /**
  * Tests if buffer is valid
  *
@@ -76,6 +94,110 @@ int odp_buffer_type(odp_buffer_t buf);
 int odp_buffer_is_valid(odp_buffer_t buf);
 
 /**
+ * Tests if buffer is segmented
+ *
+ * @param[in]	buf	Buffer handle
+ *
+ * @return		1 if buffer has more than one segment,
+ *			otherwise 0
+ */
+
+int odp_buffer_is_segmented(odp_buffer_t buf);
+
+/**
+ * Get address and size of user meta data associated with a buffer
+ *
+ * @param[in]	buf		Buffer handle
+ * @param[out]	udata_size	Number of bytes of user meta data available
+ *				at the returned address
+ * @return			Address of the user meta data for this buffer
+ *				or NULL if the buffer has no user meta data.
+ */
+void *odp_buffer_udata(odp_buffer_t buf, size_t *udata_size);
+
+/**
+ * Get address of user meta data associated with a buffer
+ *
+ * @param[in]	buf	Buffer handle
+ *
+ * @return		Address of the user meta data for this buffer
+ *			or NULL if the buffer has no user meta data.
+ */
+void *odp_buffer_udata_addr(odp_buffer_t buf);
+
+/**
+ * Get count of number of segments in a buffer
+ *
+ * @param[in]	buf	Buffer handle
+ *
+ * @return		Count of the number of segments in buf
+ */
+size_t odp_buffer_segment_count(odp_buffer_t buf);
+
+/**
+ * Get the segment identifier for a buffer segment by index
+ *
+ * @param[in]	buf	Buffer handle
+ * @param[in]	ndx	Segment index of segment of interest
+ *
+ * @return		Segment identifier or ODP_SEGMENT_INVALID if the
+ *			supplied ndx is out of range.
+ */
+odp_buffer_segment_t odp_buffer_segment_by_index(odp_buffer_t buf, size_t ndx);
+
+/**
+ * Get the next segment identifier for a buffer segment
+ *
+ * @param[in]	buf	Buffer handle
+ * @param[in]	seg	Segment identifier of the previous segment
+ *
+ * @return		Segment identifier of the next segment,
+			or ODP_SEGMENT_INVALID.
+ */
+odp_buffer_segment_t odp_buffer_segment_next(odp_buffer_t buf,
+					     odp_buffer_segment_t seg);
+/**
+ * Get start address for a specified buffer segment
+ *
+ * @param[in]	buf	Buffer handle
+ * @param[in]	seg	Segment identifier of the buffer to be addressed
+ * @param[out]	seglen	Returned number of bytes in this buffer
+ *			segment available at returned address
+ *
+ * @return		Segment start address or NULL
+ */
+void *odp_buffer_segment_map(odp_buffer_t buf, odp_buffer_segment_t seg,
+size_t *seglen);
+
+/**
+ *Unmap a buffer segment
+ *
+ * @param[in]	seg	Buffer segment handle
+ */
+void odp_buffer_segment_unmap(odp_buffer_segment_t seg);
+
+/**
+* Get start address for a specified buffer offset
+*
+* @param[in]	buf	Buffer handle
+* @param[in]	offset	Byte offset within the buffer to be addressed
+* @param[out]	seglen	Returned number of bytes in this buffer
+*			segment available at returned address
+*
+* @return		Offset start address or NULL
+*/
+void *odp_buffer_offset_map(odp_buffer_t buf, size_t offset,
+size_t *seglen);
+
+/**
+ * Unmap a buffer segment by offset
+ *
+ * @param[in]	buf	Buffer handle
+ * @param[in]	offset	Buffer offset
+ */
+void odp_buffer_offset_unmap(odp_buffer_t buf, size_t offset);
+
+/**
  * Print buffer metadata to STDOUT
  *
  * @param buf      Buffer handle
@@ -83,6 +205,69 @@ int odp_buffer_is_valid(odp_buffer_t buf);
  */
 void odp_buffer_print(odp_buffer_t buf);
 
+/**
+ * Split a buffer into two buffers at a specified split point
+ *
+ * @param[in]	buf	Handle of buffer to split
+ * @param[in]	offset	Byte offset within buf to split buffer
+ *
+ * @return		Buffer handle of the created split buffer
+ */
+odp_buffer_t odp_buffer_split(odp_buffer_t buf, size_t offset);
+
+/**
+ * Join two buffers into a single buffer
+ *
+ * @param[in]	buf1	Buffer handle of first buffer to join
+ * @param[in]	buf2	Buffer handle of second buffer to join
+ *
+ * @return		Buffer handle of the joined buffer
+ */
+odp_buffer_t odp_buffer_join(odp_buffer_t buf1, odp_buffer_t buf2);
+
+/**
+ * Trim a buffer at a specified trim point
+ *
+ * @param[in]	buf	Buffer handle of buffer to trim
+ * @param[in]	offset	byte offset within buf to trim
+ *
+ * @return		Handle of the trimmed buffer or
+ *			ODP_BUFFER_INVALID if the operation was not performed
+ */
+odp_buffer_t odp_buffer_trim(odp_buffer_t buf, size_t offset);
+/**
+ * Extend a buffer for a specified number of bytes
+ *
+ * @param[in]	buf	Buffer handle of buffer to expand
+ * @param[in]	ext	size, in bytes, of the extent to add to the
+ *			existing buffer.
+ *
+ * @return		Handle of the extended buffer or ODP_BUFFER_INVALID
+ *			if the operation was not performed
+ */
+odp_buffer_t odp_buffer_extend(odp_buffer_t buf, size_t ext);
+
+/**
+ * Clone a buffer, returning an exact copy of it
+ *
+ * @param[in]	buf	Buffer handle of buffer to duplicate
+ *
+ * @return		Handle of the duplicated buffer or ODP_BUFFER_INVALID
+ *			if the operation was not performed
+ */
+odp_buffer_t odp_buffer_clone(odp_buffer_t buf);
+
+/**
+ * Copy a buffer, returning an exact copy of it
+ *
+ * @param[in]	buf	Buffer handle of buffer to copy
+ *
+ * @return		Handle of the copied buffer or ODP_BUFFER_INVALID
+ *			if the operation was not performed
+ */
+odp_buffer_t odp_buffer_copy(odp_buffer_t buf);
+
+
 
 #ifdef __cplusplus
 }
diff --git a/platform/linux-generic/include/api/odp_buffer_pool.h b/platform/linux-generic/include/api/odp_buffer_pool.h
index fe88898..f85d96c 100644
--- a/platform/linux-generic/include/api/odp_buffer_pool.h
+++ b/platform/linux-generic/include/api/odp_buffer_pool.h
@@ -52,6 +52,27 @@ odp_buffer_pool_t odp_buffer_pool_create(const char *name,
 
 
 /**
+ * Get the next buffer pool from its predecessor
+ *
+ * @param[in]	pool		Buffer pool handle
+ * @param[out]	name		Name of the pool
+ *				(max ODP_BUFFER_POOL_NAME_LEN - 1 chars)
+ * @param[out]	udata_size	Size of user meta data used by this pool.
+ * @param[out]	buf_num		Number of buffers contained in this pool
+ * @param[out]	buf_size	Default size of application data in each buffer
+ * @param[out]	buf_type	Buffer type of the pool
+ * @param[out]	buf_opts	Buffer options for this pool
+ * @param[out]	predef		Predefined (1) or Created (0).
+ *
+ * @return			Buffer pool handle
+ */
+odp_buffer_pool_t odp_buffer_pool_next(odp_buffer_pool_t pool,
+				       char *name, size_t *udata_size,
+				       size_t *buf_num, size_t *buf_size,
+				       enum odp_buffer_type *buf_type,
+				       enum odp_buffer_opts *buf_opts,
+				       uint32_t *predef);
+/**
  * Find a buffer pool by name
  *
  * @param name      Name of the pool
@@ -80,6 +101,15 @@ void odp_buffer_pool_print(odp_buffer_pool_t pool);
  */
 odp_buffer_t odp_buffer_alloc(odp_buffer_pool_t pool);
 
+/**
+* Allocate a buffer from a buffer pool
+*
+* @param[in]	pool	Pool handle
+* @param[in]	size	Size of object to store in buffer
+*
+* @return		Buffer handle or ODP_BUFFER_INVALID
+*/
+odp_buffer_t odp_buffer_alloc_size(odp_buffer_pool_t pool, size_t size);
 
 /**
  * Buffer free
diff --git a/platform/linux-generic/odp_buffer.c b/platform/linux-generic/odp_buffer.c
index e54e0e7..7f4b4f0 100644
--- a/platform/linux-generic/odp_buffer.c
+++ b/platform/linux-generic/odp_buffer.c
@@ -45,6 +45,21 @@ int odp_buffer_is_valid(odp_buffer_t buf)
 	return (handle.index != ODP_BUFFER_INVALID_INDEX);
 }
 
+int odp_buffer_is_segmented(odp_buffer_t buf)
+{
+	odp_buffer_hdr_t *buf_hdr = odp_buf_to_hdr(buf);
+
+	if (buf_hdr->scatter.num_bufs == 0)
+		return 0;
+	else
+		return 1;
+}
+
+size_t odp_buffer_segment_count(odp_buffer_t buf)
+{
+	odp_buffer_hdr_t *buf_hdr = odp_buf_to_hdr(buf);
+	return (size_t)buf_hdr->scatter.num_bufs + 1;
+}
 
 int odp_buffer_snprint(char *str, size_t n, odp_buffer_t buf)
 {
@@ -101,8 +116,113 @@ void odp_buffer_print(odp_buffer_t buf)
 	printf("\n%s\n", str);
 }
 
+void *odp_buffer_udata(odp_buffer_t buf, size_t *udata_size)
+{
+	(void)buf;
+	(void)udata_size;
+	ODP_UNIMPLEMENTED();
+	return 0;
+}
+
+void *odp_buffer_udata_addr(odp_buffer_t buf)
+{
+	(void)buf;
+	ODP_UNIMPLEMENTED();
+	return 0;
+}
+
+odp_buffer_segment_t odp_buffer_segment_by_index(odp_buffer_t buf,
+						 size_t ndx)
+{
+	(void)buf;
+	(void)ndx;
+	ODP_UNIMPLEMENTED();
+	return 0;
+}
+
+odp_buffer_segment_t odp_buffer_segment_next(odp_buffer_t buf,
+					     odp_buffer_segment_t seg)
+{
+	(void)buf;
+	(void)seg;
+	ODP_UNIMPLEMENTED();
+	return 0;
+}
+
+void *odp_buffer_segment_map(odp_buffer_t buf, odp_buffer_segment_t seg,
+			     size_t *seglen)
+{
+	(void)buf;
+	(void)seg;
+	(void)seglen;
+	ODP_UNIMPLEMENTED();
+	return 0;
+}
+void *odp_buffer_offset_map(odp_buffer_t buf, size_t offset,
+size_t *seglen)
+{
+	(void)buf;
+	(void)offset;
+	(void)seglen;
+	ODP_UNIMPLEMENTED();
+	return 0;
+}
+void odp_buffer_offset_unmap(odp_buffer_t buf, size_t offset)
+{
+	(void)buf;
+	(void)offset;
+	ODP_UNIMPLEMENTED();
+	return;
+}
+
 void odp_buffer_copy_scatter(odp_buffer_t buf_dst, odp_buffer_t buf_src)
 {
 	(void)buf_dst;
 	(void)buf_src;
 }
+
+odp_buffer_t odp_buffer_split(odp_buffer_t buf, size_t offset)
+{
+	(void)buf;
+	(void)offset;
+	ODP_UNIMPLEMENTED();
+	return 0;
+}
+
+odp_buffer_t odp_buffer_join(odp_buffer_t buf1, odp_buffer_t buf2)
+{
+	(void)buf1;
+	(void)buf2;
+	ODP_UNIMPLEMENTED();
+	return 0;
+}
+
+odp_buffer_t odp_buffer_trim(odp_buffer_t buf, size_t offset)
+{
+	(void)buf;
+	(void)offset;
+	ODP_UNIMPLEMENTED();
+	return 0;
+}
+odp_buffer_t odp_buffer_extend(odp_buffer_t buf, size_t ext)
+{
+	(void)buf;
+	(void)ext;
+	ODP_UNIMPLEMENTED();
+	return 0;
+}
+
+odp_buffer_t odp_buffer_clone(odp_buffer_t buf)
+{
+	(void)buf;
+	ODP_UNIMPLEMENTED();
+	return 0;
+}
+
+odp_buffer_t odp_buffer_copy(odp_buffer_t buf)
+{
+	(void)buf;
+	ODP_UNIMPLEMENTED();
+	return 0;
+}
+
diff --git a/platform/linux-generic/odp_buffer_pool.c b/platform/linux-generic/odp_buffer_pool.c
index a48d7d6..bff4db5 100644
--- a/platform/linux-generic/odp_buffer_pool.c
+++ b/platform/linux-generic/odp_buffer_pool.c
@@ -471,6 +471,13 @@ odp_buffer_t odp_buffer_alloc(odp_buffer_pool_t pool_hdl)
 	return handle.u32;
 }
 
+odp_buffer_t odp_buffer_alloc_size(odp_buffer_pool_t pool, size_t size)
+{
+	(void)pool;
+	(void) size;
+	ODP_ERR("%s function is yet to be implemented", __func__);
+	return 0;
+}
 
 void odp_buffer_free(odp_buffer_t buf)
 {
