summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/netsmb/mchain.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/netsmb/mchain.h')
-rw-r--r--usr/src/uts/common/netsmb/mchain.h160
1 files changed, 106 insertions, 54 deletions
diff --git a/usr/src/uts/common/netsmb/mchain.h b/usr/src/uts/common/netsmb/mchain.h
index bccb9aab7f..c5c8512fd7 100644
--- a/usr/src/uts/common/netsmb/mchain.h
+++ b/usr/src/uts/common/netsmb/mchain.h
@@ -87,8 +87,24 @@
#endif /* (BYTE_ORDER == LITTLE_ENDIAN) */
+/*
+ * Additions for Solaris to replace things that came from
+ * <sys/mbuf.h> in the Darwin code. These are mostly just
+ * wrappers for streams functions. See: subr_mchain.c
+ */
+
#ifdef _KERNEL
+/*
+ * BSD-style mbuf "shim" for kernel code. Note, this
+ * does NOT implement BSD mbufs in the kernel. Rather,
+ * macros and wrapper functions are used so that code
+ * fomerly using mbuf_t now use STREAMS mblk_t instead.
+ */
+
+#include <sys/stream.h> /* mblk_t */
+typedef mblk_t mbuf_t;
+
/* BEGIN CSTYLED */
/*
* BSD-style mbufs, vs SysV-style mblks:
@@ -115,7 +131,42 @@
*/
/* END CSTYLED */
-#include <sys/stream.h> /* mblk_t */
+#define mtod(m, t) ((t)((m)->b_rptr))
+
+/* length arg for m_copym to "copy all" */
+#define M_COPYALL -1
+
+mblk_t *m_copym(mblk_t *, int, int, int);
+mblk_t *m_pullup(mblk_t *, int);
+mblk_t *m_split(mblk_t *, int, int);
+void m_cat(mblk_t *, mblk_t *);
+#define m_freem(x) freemsg(x)
+mblk_t *m_getblk(int, int);
+int m_fixhdr(mblk_t *m);
+
+#else /* _KERNEL */
+
+/*
+ * BSD-style mbuf work-alike, for user-level.
+ * See libsmbfs mbuf.c
+ */
+typedef struct mbuf {
+ int m_len;
+ int m_maxlen;
+ char *m_data;
+ struct mbuf *m_next;
+} mbuf_t;
+
+#define mtod(m, t) ((t)(m)->m_data)
+
+int m_get(int, mbuf_t **);
+void m_freem(mbuf_t *);
+
+#endif /* _KERNEL */
+
+/*
+ * BSD-style mbchain/mdchain work-alike
+ */
/*
* Type of copy for mb_{put|get}_mem()
@@ -126,6 +177,8 @@
#define MB_MZERO 3 /* bzero(), mb_put_mem only */
#define MB_MCUSTOM 4 /* use an user defined function */
+#ifdef _KERNEL
+
struct mbchain {
mblk_t *mb_top;
mblk_t *mb_cur;
@@ -136,65 +189,64 @@ typedef struct mbchain mbchain_t;
struct mdchain {
mblk_t *md_top; /* head of mblk chain */
mblk_t *md_cur; /* current mblk */
- uchar_t *md_pos; /* offset in the current mblk */
+ uchar_t *md_pos; /* position in md_cur */
+ /* NB: md_pos is same type as mblk_t b_rptr, b_wptr members. */
};
typedef struct mdchain mdchain_t;
-int m_fixhdr(mblk_t *m);
+mblk_t *mb_detach(mbchain_t *mbp);
+int mb_fixhdr(mbchain_t *mbp);
+int mb_put_uio(mbchain_t *mbp, uio_t *uiop, size_t size);
-int mb_init(struct mbchain *mbp);
-void mb_initm(struct mbchain *mbp, mblk_t *m);
-void mb_done(struct mbchain *mbp);
-mblk_t *mb_detach(struct mbchain *mbp);
-int mb_fixhdr(struct mbchain *mbp);
-void *mb_reserve(struct mbchain *mbp, int size);
-
-int mb_put_padbyte(struct mbchain *mbp);
-int mb_put_uint8(struct mbchain *mbp, uint8_t x);
-int mb_put_uint16be(struct mbchain *mbp, uint16_t x);
-int mb_put_uint16le(struct mbchain *mbp, uint16_t x);
-int mb_put_uint32be(struct mbchain *mbp, uint32_t x);
-int mb_put_uint32le(struct mbchain *mbp, uint32_t x);
-int mb_put_uint64be(struct mbchain *mbp, uint64_t x);
-int mb_put_uint64le(struct mbchain *mbp, uint64_t x);
-int mb_put_mem(struct mbchain *mbp, const void *src, int size, int type);
-
-int mb_put_mbuf(struct mbchain *mbp, mblk_t *m);
-int mb_put_uio(struct mbchain *mbp, uio_t *uiop, size_t size);
-
-int md_init(struct mdchain *mdp);
-void md_initm(struct mdchain *mbp, mblk_t *m);
-void md_done(struct mdchain *mdp);
-void md_append_record(struct mdchain *mdp, mblk_t *top);
-int md_next_record(struct mdchain *mdp);
-int md_get_uint8(struct mdchain *mdp, uint8_t *x);
-int md_get_uint16le(struct mdchain *mdp, uint16_t *x);
-int md_get_uint16be(struct mdchain *mdp, uint16_t *x);
-int md_get_uint32be(struct mdchain *mdp, uint32_t *x);
-int md_get_uint32le(struct mdchain *mdp, uint32_t *x);
-int md_get_uint64be(struct mdchain *mdp, uint64_t *x);
-int md_get_uint64le(struct mdchain *mdp, uint64_t *x);
-int md_get_mem(struct mdchain *mdp, void *vdst, int size, int type);
-int md_get_mbuf(struct mdchain *mdp, int size, mblk_t **m);
-int md_get_uio(struct mdchain *mdp, uio_t *uiop, size_t size);
+void md_append_record(mdchain_t *mdp, mblk_t *top);
+void md_next_record(mdchain_t *mdp);
+int md_get_uio(mdchain_t *mdp, uio_t *uiop, size_t size);
+
+#else /* _KERNEL */
/*
- * Additions for Solaris to replace things that came from
- * <sys/mbuf.h> in the Darwin code. These are mostly just
- * wrappers for streams functions. See: subr_mchain.c
+ * user-level code uses the same struct for both (MB, MD)
*/
+typedef struct mbdata {
+ mbuf_t *mb_top; /* head of mbuf chain */
+ mbuf_t *mb_cur; /* current mbuf */
+ char *mb_pos; /* position in mb_cur (get) */
+ /* NB: mb_pos is same type as mbuf_t m_data member. */
+ int mb_count; /* bytes marshalled (put) */
+} mbdata_t;
+typedef struct mbdata mbchain_t;
+typedef struct mbdata mdchain_t;
+
+#endif /* _KERNEL */
+
+int mb_init(mbchain_t *);
+void mb_initm(mbchain_t *, mbuf_t *);
+void mb_done(mbchain_t *);
+void *mb_reserve(mbchain_t *, int size);
+
+int mb_put_padbyte(mbchain_t *mbp);
+int mb_put_uint8(mbchain_t *, uint8_t);
+int mb_put_uint16be(mbchain_t *, uint16_t);
+int mb_put_uint16le(mbchain_t *, uint16_t);
+int mb_put_uint32be(mbchain_t *, uint32_t);
+int mb_put_uint32le(mbchain_t *, uint32_t);
+int mb_put_uint64be(mbchain_t *, uint64_t);
+int mb_put_uint64le(mbchain_t *, uint64_t);
+int mb_put_mem(mbchain_t *, const void *, int, int);
+int mb_put_mbuf(mbchain_t *, mbuf_t *);
+
+int md_init(mdchain_t *mdp);
+void md_initm(mdchain_t *mbp, mbuf_t *m);
+void md_done(mdchain_t *mdp);
+
+int md_get_uint8(mdchain_t *, uint8_t *);
+int md_get_uint16be(mdchain_t *, uint16_t *);
+int md_get_uint16le(mdchain_t *, uint16_t *);
+int md_get_uint32be(mdchain_t *, uint32_t *);
+int md_get_uint32le(mdchain_t *, uint32_t *);
+int md_get_uint64be(mdchain_t *, uint64_t *);
+int md_get_uint64le(mdchain_t *, uint64_t *);
+int md_get_mem(mdchain_t *, void *, int, int);
+int md_get_mbuf(mdchain_t *, int, mbuf_t **);
-#define mtod(m, t) ((t)((m)->b_rptr))
-
-/* length to m_copym to copy all */
-#define M_COPYALL -1
-
-mblk_t *m_copym(mblk_t *, int, int, int);
-mblk_t *m_pullup(mblk_t *, int);
-mblk_t *m_split(mblk_t *, int, int);
-void m_cat(mblk_t *, mblk_t *);
-#define m_freem(x) freemsg(x)
-mblk_t *m_getblk(int, int);
-
-#endif /* ifdef _KERNEL */
#endif /* !_MCHAIN_H_ */