#ifndef __KERNEL__
#include <liblustre.h>
#include <libcfs/list.h>
-#include <zlib.h>
#else
#include <linux/crypto.h>
-#include <linux/zutil.h>
#endif
#include <obd.h>
+#include <obd_cksum.h>
#include <obd_class.h>
#include <obd_support.h>
#include <lustre_net.h>
#ifdef __KERNEL__
+#ifdef HAVE_ADLER
static int do_bulk_checksum_adler32(struct ptlrpc_bulk_desc *desc, void *buf)
{
struct page *page;
memcpy(buf, &adler32, sizeof(adler32));
return 0;
}
+#endif
static int do_bulk_checksum_crc32(struct ptlrpc_bulk_desc *desc, void *buf)
{
static int do_bulk_checksum(struct ptlrpc_bulk_desc *desc, __u32 alg, void *buf)
{
- struct crypto_tfm *tfm;
+ struct hash_desc hdesc;
struct scatterlist *sl;
- int i, rc = 0;
+ int i, rc = 0, bytes = 0;
LASSERT(alg > BULK_HASH_ALG_NULL &&
alg < BULK_HASH_ALG_MAX);
- if (alg == BULK_HASH_ALG_ADLER32)
+ switch (alg) {
+ case BULK_HASH_ALG_ADLER32:
+#ifdef HAVE_ADLER
return do_bulk_checksum_adler32(desc, buf);
- if (alg == BULK_HASH_ALG_CRC32)
+#else
+ CERROR("Adler32 not supported\n");
+ return -EINVAL;
+#endif
+ case BULK_HASH_ALG_CRC32:
return do_bulk_checksum_crc32(desc, buf);
+ }
- tfm = crypto_alloc_tfm(hash_types[alg].sht_tfm_name, 0);
- if (tfm == NULL) {
+ hdesc.tfm = ll_crypto_alloc_hash(hash_types[alg].sht_tfm_name, 0, 0);
+ if (hdesc.tfm == NULL) {
CERROR("Unable to allocate TFM %s\n", hash_types[alg].sht_name);
return -ENOMEM;
}
+ hdesc.flags = 0;
OBD_ALLOC(sl, sizeof(*sl) * desc->bd_iov_count);
if (sl == NULL) {
sl[i].page = desc->bd_iov[i].kiov_page;
sl[i].offset = desc->bd_iov[i].kiov_offset & ~CFS_PAGE_MASK;
sl[i].length = desc->bd_iov[i].kiov_len;
+ bytes += desc->bd_iov[i].kiov_len;
}
- crypto_digest_init(tfm);
- crypto_digest_update(tfm, sl, desc->bd_iov_count);
- crypto_digest_final(tfm, buf);
+ ll_crypto_hash_init(&hdesc);
+ ll_crypto_hash_update(&hdesc, sl, bytes);
+ ll_crypto_hash_final(&hdesc, buf);
OBD_FREE(sl, sizeof(*sl) * desc->bd_iov_count);
out_tfm:
- crypto_free_tfm(tfm);
+ ll_crypto_free_hash(hdesc.tfm);
return rc;
}
static int do_bulk_checksum(struct ptlrpc_bulk_desc *desc, __u32 alg, void *buf)
{
- __u32 csum32 = ~0;
+ __u32 csum32;
int i;
LASSERT(alg == BULK_HASH_ALG_ADLER32 || alg == BULK_HASH_ALG_CRC32);
char *ptr = desc->bd_iov[i].iov_base;
int len = desc->bd_iov[i].iov_len;
- if (alg == BULK_HASH_ALG_ADLER32)
+ switch (alg) {
+ case BULK_HASH_ALG_ADLER32:
+#ifdef HAVE_ADLER
csum32 = zlib_adler32(csum32, ptr, len);
- else
+#else
+ CERROR("Adler32 not supported\n");
+ return -EINVAL;
+#endif
+ break;
+ case BULK_HASH_ALG_CRC32:
csum32 = crc32_le(csum32, ptr, len);
+ break;
+ }
}
- *((__u32 *) buf) = csum32;
+ csum32 = cpu_to_le32(csum32);
+ memcpy(buf, &csum32, sizeof(csum32));
return 0;
}
-#endif
+#endif /* __KERNEL__ */
/*
* perform algorithm @alg checksum on @desc, store result in @buf.
"null", "null", 0, 0, 0
},
[BULK_CIPH_ALG_ARC4] = {
- "arc4", "arc4", CRYPTO_TFM_MODE_ECB, 0, 16
+ "arc4", "ecb(arc4)", 0, 0, 16
},
[BULK_CIPH_ALG_AES128] = {
- "aes128", "aes", CRYPTO_TFM_MODE_CBC, 16, 16
+ "aes128", "cbc(aes)", 0, 16, 16
},
[BULK_CIPH_ALG_AES192] = {
- "aes192", "aes", CRYPTO_TFM_MODE_CBC, 16, 24
+ "aes192", "cbc(aes)", 0, 16, 24
},
[BULK_CIPH_ALG_AES256] = {
- "aes256", "aes", CRYPTO_TFM_MODE_CBC, 16, 32
+ "aes256", "cbc(aes)", 0, 16, 32
},
[BULK_CIPH_ALG_CAST128] = {
- "cast128", "cast5", CRYPTO_TFM_MODE_CBC, 8, 16
+ "cast128", "cbc(cast5)", 0, 8, 16
},
[BULK_CIPH_ALG_CAST256] = {
- "cast256", "cast6", CRYPTO_TFM_MODE_CBC, 16, 32
+ "cast256", "cbc(cast6)", 0, 16, 32
},
[BULK_CIPH_ALG_TWOFISH128] = {
- "twofish128", "twofish", CRYPTO_TFM_MODE_CBC, 16, 16
+ "twofish128", "cbc(twofish)", 0, 16, 16
},
[BULK_CIPH_ALG_TWOFISH256] = {
- "twofish256", "twofish", CRYPTO_TFM_MODE_CBC, 16, 32
+ "twofish256", "cbc(twofish)", 0, 16, 32
},
};