summaryrefslogtreecommitdiffstats
path: root/lib/libspl
diff options
context:
space:
mode:
authorTom Caputi <[email protected]>2016-05-12 10:51:24 -0400
committerBrian Behlendorf <[email protected]>2016-07-20 10:43:30 -0700
commit0b04990a5de594659d2cf20458965277dd6efeb1 (patch)
tree74369a3236e03359f7276cb9b19687e28c7f6d59 /lib/libspl
parentbe88e733a634ad0d7f20350e1a17ede51922d3ff (diff)
Illumos Crypto Port module added to enable native encryption in zfs
A port of the Illumos Crypto Framework to a Linux kernel module (found in module/icp). This is needed to do the actual encryption work. We cannot use the Linux kernel's built in crypto api because it is only exported to GPL-licensed modules. Having the ICP also means the crypto code can run on any of the other kernels under OpenZFS. I ended up porting over most of the internals of the framework, which means that porting over other API calls (if we need them) should be fairly easy. Specifically, I have ported over the API functions related to encryption, digests, macs, and crypto templates. The ICP is able to use assembly-accelerated encryption on amd64 machines and AES-NI instructions on Intel chips that support it. There are place-holder directories for similar assembly optimizations for other architectures (although they have not been written). Signed-off-by: Tom Caputi <[email protected]> Signed-off-by: Tony Hutter <[email protected]> Signed-off-by: Brian Behlendorf <[email protected]> Issue #4329
Diffstat (limited to 'lib/libspl')
-rw-r--r--lib/libspl/include/sys/byteorder.h22
-rw-r--r--lib/libspl/include/sys/file.h2
-rw-r--r--lib/libspl/include/sys/types.h1
3 files changed, 24 insertions, 1 deletions
diff --git a/lib/libspl/include/sys/byteorder.h b/lib/libspl/include/sys/byteorder.h
index 528d2d208..7ef1c4295 100644
--- a/lib/libspl/include/sys/byteorder.h
+++ b/lib/libspl/include/sys/byteorder.h
@@ -128,6 +128,28 @@ extern in_port_t ntohs(in_port_t);
#define BE_64(x) BSWAP_64(x)
#endif
+#ifdef _BIG_ENDIAN
+static __inline__ uint64_t
+htonll(uint64_t n) {
+ return (n);
+}
+
+static __inline__ uint64_t
+ntohll(uint64_t n) {
+ return (n);
+}
+#else
+static __inline__ uint64_t
+htonll(uint64_t n) {
+ return ((((uint64_t)htonl(n)) << 32) + htonl(n >> 32));
+}
+
+static __inline__ uint64_t
+ntohll(uint64_t n) {
+ return ((((uint64_t)ntohl(n)) << 32) + ntohl(n >> 32));
+}
+#endif
+
/*
* Macros to read unaligned values from a specific byte order to
* native byte order
diff --git a/lib/libspl/include/sys/file.h b/lib/libspl/include/sys/file.h
index 163a4dca6..b5d985bda 100644
--- a/lib/libspl/include/sys/file.h
+++ b/lib/libspl/include/sys/file.h
@@ -33,7 +33,7 @@
#define FREAD 1
#define FWRITE 2
-// #define FAPPEND 8
+// #define FAPPEND 8
#define FCREAT O_CREAT
#define FTRUNC O_TRUNC
diff --git a/lib/libspl/include/sys/types.h b/lib/libspl/include/sys/types.h
index 8996af96a..c58b2d566 100644
--- a/lib/libspl/include/sys/types.h
+++ b/lib/libspl/include/sys/types.h
@@ -64,6 +64,7 @@ typedef int major_t;
typedef int minor_t;
typedef ushort_t o_mode_t; /* old file attribute type */
+typedef short index_t;
/*
* Definitions remaining from previous partial support for 64-bit file