{"action":"created","comment":{"url":"https://api.github.com/repos/Linaro/odp/pulls/comments/192021775","pull_request_review_id":124710131,"id":192021775,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5MjAyMTc3NQ==","diff_hunk":"@@ -0,0 +1,863 @@\n+/* Copyright (c) 2014-2018, Linaro Limited\n+ * All rights reserved.\n+ *\n+ * SPDX-License-Identifier:     BSD-3-Clause\n+ */\n+\n+/**\n+ * @file\n+ *\n+ * ODP Compression\n+ */\n+\n+#ifndef ODP_API_COMP_H_\n+#define ODP_API_COMP_H_\n+\n+#include <odp/visibility_begin.h>\n+#include <odp/api/support.h>\n+#include <odp/api/packet.h>\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+/** @defgroup odp_compression ODP COMP\n+ *  ODP Compression is an API set to do compression+hash or decompression+hash\n+ *  operations on data. Hash is calculated on plaintext.\n+ *\n+ *  if opcode = ODP_COMP_COMPRESS, then it will apply hash and then compress,\n+ *  if opcode = ODP_COMP_DECOMPRESS, then it will decompress and then apply\n+ *  hash.\n+ *  Independent hash-only operations are not supported. Implementation should\n+ *  perform hash along with valid compression algo.\n+ *  Macros, enums, types and operations to utilize compression interface.\n+ *  @{\n+ */\n+\n+/**\n+ * @def ODP_COMP_SESSION_INVALID\n+ * Invalid session handle\n+ */\n+\n+/**\n+ * @typedef odp_comp_session_t\n+ * Compression/Decompression session handle\n+ */\n+\n+/**\n+ * Compression API operation mode\n+ */\n+typedef enum {\n+\t/** Synchronous, return results immediately */\n+\tODP_COMP_SYNC,\n+\t/** Asynchronous, return results via event queue */\n+\tODP_COMP_ASYNC\n+} odp_comp_op_mode_t;\n+\n+/**\n+ * Comp API operation type.\n+ *\n+ */\n+typedef enum {\n+\t/** Compress */\n+\tODP_COMP_OP_COMPRESS,\n+\t/** Decompress */\n+\tODP_COMP_OP_DECOMPRESS\n+} odp_comp_op_t;\n+\n+/**\n+ * Comp API hash algorithm\n+ *\n+ */\n+typedef enum {\n+\t/** ODP_COMP_HASH_ALG_NONE - No hash algorithm selected. */\n+\tODP_COMP_HASH_ALG_NONE,\n+\t/** ODP_COMP_HASH_ALG_SHA1 - SHA-1 hash algorithm. */\n+\tODP_COMP_HASH_ALG_SHA1,\n+\t/** ODP_COMP_HASH_ALG_SHA256 - SHA-2 hash algorithm\n+\t * 256-bit digest length.\n+\t */\n+\tODP_COMP_HASH_ALG_SHA256\n+} odp_comp_hash_alg_t;\n+\n+/**\n+ * Comp API compression algorithm\n+ *\n+ */\n+typedef enum {\n+\t/** No algorithm specified.\n+\t * Means no compression, output == input.\n+\t * if provided, no operation (compression/decompression or hash)\n+\t * applied on input. Added for testing purpose.\n+\t */\n+\tODP_COMP_ALG_NULL,\n+\t/** DEFLATE - RFC1951 */\n+\tODP_COMP_ALG_DEFLATE,\n+\t/** ZLIB - RFC1950 */\n+\tODP_COMP_ALG_ZLIB,\n+\t/** LZS */\n+\tODP_COMP_ALG_LZS\n+} odp_comp_alg_t;\n+\n+/**\n+ * Comp API session creation return code\n+ *\n+ */\n+typedef enum {\n+\t/** Session created */\n+\tODP_COMP_SES_CREATE_ERR_NONE,\n+\t/** Creation failed, no resources */\n+\tODP_COMP_SES_CREATE_ERR_ENOMEM,\n+\t/** Creation failed, bad compression params */\n+\tODP_COMP_SES_CREATE_ERR_INV_COMP,\n+\t/** Creation failed, bad hash params */\n+\tODP_COMP_SES_CREATE_ERR_INV_HASH,\n+\t/** Creation failed,requested configuration not supported*/\n+\tODP_COMP_SES_CREATE_ERR_NOT_SUPPORTED\n+} odp_comp_ses_create_err_t;\n+\n+/**\n+ * Comp API operation return codes\n+ *\n+ */\n+typedef enum {\n+\t/** Operation completed successfully*/\n+\tODP_COMP_ERR_NONE,\n+\t/** Operation paused due to insufficient output buffer.\n+\t *\n+\t * This is not an error condition. On seeing this situation,\n+\t * Implementation should maintain context of in-progress operation and\n+\t * application should call packet processing API again with valid\n+\t * output buffer but no other alteration to operation params\n+\t * (odp_comp_op_param_t).\n+\t *\n+\t * if using async mode, application should either make sure to\n+\t * provide sufficient output buffer size OR maintain relevant\n+\t * context (or ordering) information with respect to each input packet\n+\t * en-queued for processing.\n+\t *\n+\t */\n+\tODP_COMP_ERR_OUT_OF_SPACE,\n+\t/** Invalid user data pointers */\n+\tODP_COMP_ERR_DATA_PTR,\n+\t/** Invalid input data size */\n+\tODP_COMP_ERR_DATA_SIZE,\n+\t/**  Compression Algo failure */\n+\tODP_COMP_ERR_ALGO_FAIL,\n+\t/** Error if operation has been requested in an invalid state */\n+\tODP_COMP_ERR_INV_STATE,\n+\t/** Error if API does not support any of the operational parameter. */\n+\tODP_COMP_ERR_NOT_SUPPORTED,\n+\t/** Error if session is invalid. */\n+\tODP_COMP_ERR_INV_SESS\n+} odp_comp_err_t;\n+\n+/**\n+ * Comp API enumeration for preferred compression level/speed. Applicable\n+ * only for compression operation not decompression.\n+ * Value provided defines a trade-off between speed and compression ratio.\n+ *\n+ * If compression level == ODP_COMP_LEVEL_MIN, output will be produced at\n+ * fastest possible rate,\n+ *\n+ * If compression level == ODP_COMP_LEVEL_MAX, output will be highest possible\n+ * compression,\n+ *\n+ * compression level == ODP_COMP_LEVEL_DEFAULT means implementation will use\n+ * its default choice of compression level.\n+ *\n+ */\n+typedef enum {\n+\t/* Use implementation default */\n+\tODP_COMP_LEVEL_DEFAULT = 0,\n+\t/** Minimum compression (fastest in speed) */\n+\tODP_COMP_LEVEL_MIN,\n+\t/** Maximum compression (slowest in speed) */\n+\tODP_COMP_LEVEL_MAX,\n+} odp_comp_level_t;\n+\n+/**\n+ * Comp API enumeration for huffman encoding. Valid for compression operation.\n+ *\n+ */\n+typedef enum {\n+\t/** use implementation default to choose between compression codes  */\n+\tODP_COMP_HUFFMAN_CODE_DEFAULT = 0,\n+\t/** use fixed huffman codes */\n+\tODP_COMP_HUFFMAN_CODE_FIXED,\n+\t/** use dynamic huffman coding */\n+\tODP_COMP_HUFFMAN_CODE_DYNAMIC,\n+} odp_comp_huffman_code_t;\n+\n+/**\n+ * Hash algorithms in a bit field structure\n+ *\n+ */\n+typedef union odp_comp_hash_algos_t {\n+\t/** hash algorithms */\n+\tstruct {\n+\t\t/** ODP_COMP_HASH_ALG_SHA1 */\n+\t\tuint32_t sha1  : 1;\n+\n+\t\t/** ODP_COMP_HASH_ALG_SHA256 */\n+\t\tuint32_t sha256 : 1;\n+\n+\t} bit;\n+\n+\t/** All bits of the bit field structure\n+\t *\n+\t * This field can be used to set/clear all flags, or bitwise\n+\t * operations over the entire structure.\n+\t */\n+\tuint32_t all_bits;\n+} odp_comp_hash_algos_t;\n+\n+/**\n+ * Comp algorithms in a bit field structure\n+ *\n+ */\n+typedef union odp_comp_algos_t {\n+\t/** Compression algorithms */\n+\tstruct {\n+\t\t/** ODP_COMP_ALG_NULL */\n+\t\tuint32_t null       : 1;\n+\n+\t\t/** ODP_COMP_ALG_DEFLATE */\n+\t\tuint32_t deflate    : 1;\n+\n+\t\t/** ODP_COMP_ALG_ZLIB */\n+\t\tuint32_t zlib       : 1;\n+\n+\t\t/** ODP_COMP_ALG_LZS */\n+\t\tuint32_t lzs        :1;\n+\t} bit;\n+\n+\t/** All bits of the bit field structure\n+\t * This field can be used to set/clear all flags, or bitwise\n+\t * operations over the entire structure.\n+\t */\n+\tuint32_t all_bits;\n+} odp_comp_algos_t;\n+\n+/**\n+ * Compression Interface Capabilities\n+ *\n+ */\n+typedef struct odp_comp_capability_t {\n+\t/** Maximum number of  sessions */\n+\tuint32_t max_sessions;\n+\n+\t/** Supported compression algorithms */\n+\todp_comp_algos_t comp_algos;\n+\n+\t/** Supported hash algorithms. */\n+\todp_comp_hash_algos_t hash_algos;\n+\n+\t/** Support type for synchronous operation mode (ODP_COMP_SYNC).\n+\t *  User should set odp_comp_session_param_t:mode based on\n+\t *  support level as indicated by this param.\n+\t */\n+\todp_support_t sync;\n+\n+\t/** Support type for asynchronous operation mode (ODP_COMP_ASYNC).\n+\t *  User should set odp_comp_session_param_t:mode param based on\n+\t *  support level as indicated by this param.\n+\t */\n+\todp_support_t async;\n+} odp_comp_capability_t;\n+\n+/**\n+ * Hash algorithm capabilities\n+ *\n+ */\n+typedef struct odp_comp_hash_alg_capability_t {\n+\t/** Digest length in bytes */\n+\tuint32_t digest_len;\n+} odp_comp_hash_alg_capability_t;\n+\n+/**\n+ * Compression algorithm capabilities structure for each algorithm.\n+ *\n+ */\n+typedef struct odp_comp_alg_capability_t {\n+\t/** Enumeration indicating algorithm support for dictionary load */\n+\todp_support_t support_dict;\n+\n+\t/** Optional Maximum length of dictionary supported\n+\t *  by implementation of an algorithm.\n+\t *\n+\t *  Invalid if support_dict == ODP_SUPPORT_NO.\n+\t *\n+\t *  Implementation use dictionary of length less than or equal to value\n+\t *  indicated by dict_len. if set to 0 and if support_dict ==\n+\t *  ODP_SUPPORT_YES, then implementation will use dictionary length\n+\t *  less than or equal to user input length in odp_comp_set_dict()\n+\t *  and update used dictionary length at output of the call.\n+\t *\n+\t */\n+\tuint32_t dict_len;\n+\n+\t/** Maximum compression level supported by implementation of this algo.\n+\t * Indicates number of compression levels supported by implementation,\n+\t *\n+\t * where,\n+\t *\n+\t * 1 means fastest compression i.e. output produced at\n+\t * best possible speed at the expense of compression quality, and\n+\t *\n+\t * max_level means best compression i.e.output produced is best possible\n+\t * compressed content at the expense of speed.\n+\t *\n+\t * Example, if max_level = 4 , it means algorithm supports four levels\n+\t * of compression from value 1 up to 4. User can set this value from\n+\t * 1 (fastest compression) to 4 (best compression).\n+\t * See RFC1950 for an example explanation to level.\n+\t *\n+\t * Value 0 mean implementation use its default value.\n+\t *\n+\t */\n+\tuint32_t max_level;\n+\n+\t/** Supported hash algorithms */\n+\todp_comp_hash_algos_t hash_algo;\n+} odp_comp_alg_capability_t;\n+\n+/**\n+ * Comp API dictionary type\n+ * Consists of pointer to byte buffer. length of dictionary\n+ * indicated by length parameter.\n+ */\n+typedef struct odp_comp_dict_t {\n+\t/** pointer to byte array */\n+\tuint8_t *buf;\n+\t/** length of the dictionary. */\n+\tuint32_t len;\n+} odp_comp_dict_t;\n+\n+/**\n+ * Comp API algorithm specific parameters\n+ *\n+ */\n+typedef struct odp_comp_algo_param_t {\n+\t/**\n+\t * Struct for defining deflate algorithm parameters.\n+\t * Also initialized by other deflate based algorithms , ex. ZLIB\n+\t */\n+\tstruct comp_alg_def_param {\n+\t\t/**\n+\t\t * compression level where\n+\t\t * ODP_COMP_LEVEL_MIN <= level <= ODP_COMP_LEVEL_MAX\n+\t\t */\n+\t\todp_comp_level_t level;\n+\t\t/** huffman code to use */\n+\t\todp_comp_huffman_code_t comp_code;\n+\t} deflate; /** deflate parameter */\n+\n+\t/** Struct for defining zlib algorithm parameters.*/\n+\tstruct comp_alg_zlib_param {\n+\t\t\t/** deflate algo params */\n+\t\t\tstruct comp_alg_def_param def;\n+\t} zlib; /** zlib parameter */\n+} odp_comp_alg_param_t;\n+\n+ /**\n+ * Comp API session creation parameters\n+ *\n+ */\n+typedef struct odp_comp_session_param_t {\n+\t/** Compress vs. Decompress operation */\n+\todp_comp_op_t op;\n+\n+\t/** Sync vs Async mode\n+\t *\n+\t * When mode = ODP_COMP_SYNC, odp_comp_xxx()\n+\t * should be called.\n+\t *\n+\t * When mode = ODP_COMP_ASYNC, odp_comp_xxx_enq()\n+\t * should be called.\n+\t *\n+\t * Use odp_comp_capability() for supported mode.\n+\t *\n+\t */\n+\todp_comp_op_mode_t mode;\n+\n+\t/** Compression algorithm\n+\t *\n+\t *  Use odp_comp_capability() for supported algorithms.\n+\t */\n+\todp_comp_alg_t comp_algo;\n+\n+\t/** Hash algorithm\n+\t *\n+\t *  Use odp_comp_alg_capability() for supported hash algo for\n+\t *  compression algo given as comp_alg. Implementation should not\n+\t *  support hash only operation on data. output should always contain\n+\t *  data + hash.\n+\t *\n+\t */\n+\todp_comp_hash_alg_t hash_algo;\n+\n+\t/** parameters specific to compression */\n+\todp_comp_alg_param_t algo_param;\n+\n+\t/** Async mode completion event queue\n+\t *\n+\t * When mode = ODP_COMP_ASYNC, user should wait on ODP_EVENT_PACKET\n+\t * with subtype ODP_EVENT_PACKET_COMP on this queue.\n+\t *\n+\t * By default, implementation enques completion events in-order-of\n+\t * request submission and thus queue is considered ordered.\n+\t *\n+\t * Please note, behavior could be changed or enhanced\n+\t * to queue event in-order-of their completion to enable\n+\t * performance-oriented application to leverage hw offered parallelism.\n+\t * However, this will be subject to application requirement and more\n+\t * explicit defined use-case.\n+\t *\n+\t */\n+\todp_queue_t compl_queue;\n+} odp_comp_session_param_t;\n+\n+/**\n+ * Comp API per packet operation result\n+ *\n+ */\n+typedef struct odp_comp_packet_op_result_t {\n+\t/** Operation Return Code */\n+\todp_comp_err_t err;\n+\n+\t/** Output packet data range. Where,\n+\t *\n+\t *  offset = base offset within packet, current data is written at.\n+\t *\n+\t *  length = length of data written.\n+\t *\n+\t */\n+\todp_packet_data_range_t out_data_range;\n+} odp_comp_packet_op_result_t;\n+\n+/**\n+ * Comp packet API per packet operation parameters\n+ */\n+typedef struct odp_comp_packet_op_param_t {\n+\t/** Session handle from creation */\n+\todp_comp_session_t session;\n+\n+\t/** Boolean indicating if current input is last chunk of data, where\n+\t *\n+\t *   true : last chunk\n+\t *\n+\t *   false: more to follow\n+\t *\n+\t * If set to true, indicates this is the last chunk of\n+\t * data. After processing of last chunk of data is complete i.e.\n+\t * call returned with any error code except ODP_COMP_ERR_OUT_OF_SPACE,\n+\t * implementation should move algorithm to stateless mode\n+\t * for next of batch of operation i.e. reset history,\n+\t * insert 'End of Block' marker into compressed data stream(if\n+\t * supported by algo).See deflate/zlib for interpretation of\n+\t * stateless/stateful.\n+\t *\n+\t * For stateless compressions (ex ipcomp), last should be set to 'true'\n+\t * for every input packet processing call.\n+\t *\n+\t * For compression + hash, digest will be available after\n+\t * last chunk is processed completely. In case of\n+\t * ODP_COMP_ERR_OUT_OF_SPACE, application should keep on calling\n+\t * odp_comp_xxx() API with more output buffer unless call returns\n+\t * with ODP_COMP_ERR_NONE or other failure code except\n+\t *  ODP_COMP_ERR_OUT_OF_SPACE.\n+\t */\n+\todp_bool_t last;\n+\n+\t/** Input data range to process */\n+\todp_packet_data_range_t in_data_range;\n+\n+\t/** Output packet data range.\n+\t * Indicates where processed packet will be written\n+\t * where length specifies,\n+\t * length of available packet buffer at input, and\n+\t * length of data written at output\n+\t */\n+\todp_packet_data_range_t out_data_range;\n+} odp_comp_packet_op_param_t;\n+\n+/**\n+ * Query comp capabilities\n+ *\n+ * Output comp capabilities on success.\n+ *\n+ * @param[out] capa   Pointer to capability structure for output\n+ *\n+ * @retval 0 on success\n+ * @retval <0 on failure\n+ */\n+int odp_comp_capability(odp_comp_capability_t *capa);\n+\n+/**\n+ * Query supported compression algorithm capabilities\n+ *\n+ * Output algorithm capabilities.\n+ *\n+ * @param\tcomp\tCompression algorithm\n+ * @param[out]\tcapa\tCompression algorithm capability\n+ *\n+ * @retval <0 on failure\n+ */\n+int odp_comp_alg_capability(odp_comp_alg_t comp,\n+\t\t\t    odp_comp_alg_capability_t capa);\n+\n+/**\n+ * Query supported hash algorithm capabilities\n+ *\n+ * Outputs all supported configuration options for the algorithm.\n+ *\n+ * @param\thash     Hash algorithm\n+ * @param\tcapa     Hash algorithm capability\n+ *\n+ * @retval <0 on failure\n+ */\n+int odp_comp_hash_alg_capability(odp_comp_hash_alg_t hash,\n+\t\t\t\t odp_comp_hash_alg_capability_t capa);\n+\n+/**\n+ * Initialize comp session parameters\n+ *\n+ * Initialize an odp_comp_session_param_t to its default values for\n+ * all fields.\n+ *\n+ * @param param   Pointer to odp_comp_session_param_t to be initialized\n+ */\n+void odp_comp_session_param_init(odp_comp_session_param_t *param);\n+\n+/**\n+ * Compression session creation\n+ *\n+ * Create a comp session according to the session parameters. Use\n+ * odp_comp_session_param_init() to initialize parameters into their\n+ * default values.\n+ *\n+ * @param param             Session parameters\n+ *\n+ * @retval\tCreated session or ODP_COMP_SESSION_INVALID on error\n+ */\n+odp_comp_session_t odp_comp_session_create(const odp_comp_session_param_t *\n+\t\t\t\t\t   param);\n+\n+/**\n+ * Comp session destroy\n+ *\n+ * Destroy an unused session. Result is undefined if session is being used\n+ * (i.e. asynchronous operation is in progress).\n+ *\n+ * @param session           Session handle\n+ *\n+ * @retval 0 on success\n+ * @retval <0 on failure\n+ */\n+int odp_comp_session_destroy(odp_comp_session_t session);\n+\n+/**\n+ * Comp set dictionary\n+ *\n+ * Should be called when there is no operation in progress i.e.\n+ * before initiating processing of first chunk of data and\n+ * after processing of last chunk of data is complete.\n+ *\n+ * @param\t\tsession\t\tSession handle\n+ * @param[in, out]\tdict\t\tPointer to dictionary.\n+ *\t\t\t\t\tImplementation should update\n+ *\t\t\t\t\tlength of dictionary at output.","path":"include/odp/api/spec/comp.h","position":570,"original_position":570,"commit_id":"4f1ca1494864d54b26289a94da6d89756214092d","original_commit_id":"4f1ca1494864d54b26289a94da6d89756214092d","user":{"login":"psavol","id":9589374,"node_id":"MDQ6VXNlcjk1ODkzNzQ=","avatar_url":"https://avatars0.githubusercontent.com/u/9589374?v=4","gravatar_id":"","url":"https://api.github.com/users/psavol","html_url":"https://github.com/psavol","followers_url":"https://api.github.com/users/psavol/followers","following_url":"https://api.github.com/users/psavol/following{/other_user}","gists_url":"https://api.github.com/users/psavol/gists{/gist_id}","starred_url":"https://api.github.com/users/psavol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/psavol/subscriptions","organizations_url":"https://api.github.com/users/psavol/orgs","repos_url":"https://api.github.com/users/psavol/repos","events_url":"https://api.github.com/users/psavol/events{/privacy}","received_events_url":"https://api.github.com/users/psavol/received_events","type":"User","site_admin":false},"body":"Where dict length is updated ? Why dict pointer is in and out parameter?","created_at":"2018-05-31T08:20:28Z","updated_at":"2018-05-31T08:20:29Z","html_url":"https://github.com/Linaro/odp/pull/580#discussion_r192021775","pull_request_url":"https://api.github.com/repos/Linaro/odp/pulls/580","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/Linaro/odp/pulls/comments/192021775"},"html":{"href":"https://github.com/Linaro/odp/pull/580#discussion_r192021775"},"pull_request":{"href":"https://api.github.com/repos/Linaro/odp/pulls/580"}}},"pull_request":{"url":"https://api.github.com/repos/Linaro/odp/pulls/580","id":183768933,"node_id":"MDExOlB1bGxSZXF1ZXN0MTgzNzY4OTMz","html_url":"https://github.com/Linaro/odp/pull/580","diff_url":"https://github.com/Linaro/odp/pull/580.diff","patch_url":"https://github.com/Linaro/odp/pull/580.patch","issue_url":"https://api.github.com/repos/Linaro/odp/issues/580","number":580,"state":"open","locked":false,"title":"[PATCH API-NEXT v3] api: compression: compression spec initial draft","user":{"login":"bala-manoharan","id":25454254,"node_id":"MDQ6VXNlcjI1NDU0MjU0","avatar_url":"https://avatars0.githubusercontent.com/u/25454254?v=4","gravatar_id":"","url":"https://api.github.com/users/bala-manoharan","html_url":"https://github.com/bala-manoharan","followers_url":"https://api.github.com/users/bala-manoharan/followers","following_url":"https://api.github.com/users/bala-manoharan/following{/other_user}","gists_url":"https://api.github.com/users/bala-manoharan/gists{/gist_id}","starred_url":"https://api.github.com/users/bala-manoharan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bala-manoharan/subscriptions","organizations_url":"https://api.github.com/users/bala-manoharan/orgs","repos_url":"https://api.github.com/users/bala-manoharan/repos","events_url":"https://api.github.com/users/bala-manoharan/events{/privacy}","received_events_url":"https://api.github.com/users/bala-manoharan/received_events","type":"User","site_admin":false},"body":"The initial draft of compression spec\r\n\r\nSigned-off-by: Balasubramanian Manoharan <balasubramanian.manoharan@cavium.com>\r\nSigned-off-by: Shally Verma <shally.verma@cavium.com>\r\nSigned-off-by: Mahipal Challa <mahipal.challa@cavium.com>","created_at":"2018-04-24T15:05:58Z","updated_at":"2018-05-31T08:20:29Z","closed_at":null,"merged_at":null,"merge_commit_sha":"33d8f6c6498ce6f40b5e210b8c4e4171079aea70","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":577854052,"node_id":"MDU6TGFiZWw1Nzc4NTQwNTI=","url":"https://api.github.com/repos/Linaro/odp/labels/Email_sent","name":"Email_sent","color":"ededed","default":false},{"id":666131932,"node_id":"MDU6TGFiZWw2NjYxMzE5MzI=","url":"https://api.github.com/repos/Linaro/odp/labels/checkpatch","name":"checkpatch","color":"0000ff","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/Linaro/odp/pulls/580/commits","review_comments_url":"https://api.github.com/repos/Linaro/odp/pulls/580/comments","review_comment_url":"https://api.github.com/repos/Linaro/odp/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Linaro/odp/issues/580/comments","statuses_url":"https://api.github.com/repos/Linaro/odp/statuses/4f1ca1494864d54b26289a94da6d89756214092d","head":{"label":"bala-manoharan:compression","ref":"compression","sha":"4f1ca1494864d54b26289a94da6d89756214092d","user":{"login":"bala-manoharan","id":25454254,"node_id":"MDQ6VXNlcjI1NDU0MjU0","avatar_url":"https://avatars0.githubusercontent.com/u/25454254?v=4","gravatar_id":"","url":"https://api.github.com/users/bala-manoharan","html_url":"https://github.com/bala-manoharan","followers_url":"https://api.github.com/users/bala-manoharan/followers","following_url":"https://api.github.com/users/bala-manoharan/following{/other_user}","gists_url":"https://api.github.com/users/bala-manoharan/gists{/gist_id}","starred_url":"https://api.github.com/users/bala-manoharan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bala-manoharan/subscriptions","organizations_url":"https://api.github.com/users/bala-manoharan/orgs","repos_url":"https://api.github.com/users/bala-manoharan/repos","events_url":"https://api.github.com/users/bala-manoharan/events{/privacy}","received_events_url":"https://api.github.com/users/bala-manoharan/received_events","type":"User","site_admin":false},"repo":{"id":90684593,"node_id":"MDEwOlJlcG9zaXRvcnk5MDY4NDU5Mw==","name":"odp","full_name":"bala-manoharan/odp","owner":{"login":"bala-manoharan","id":25454254,"node_id":"MDQ6VXNlcjI1NDU0MjU0","avatar_url":"https://avatars0.githubusercontent.com/u/25454254?v=4","gravatar_id":"","url":"https://api.github.com/users/bala-manoharan","html_url":"https://github.com/bala-manoharan","followers_url":"https://api.github.com/users/bala-manoharan/followers","following_url":"https://api.github.com/users/bala-manoharan/following{/other_user}","gists_url":"https://api.github.com/users/bala-manoharan/gists{/gist_id}","starred_url":"https://api.github.com/users/bala-manoharan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bala-manoharan/subscriptions","organizations_url":"https://api.github.com/users/bala-manoharan/orgs","repos_url":"https://api.github.com/users/bala-manoharan/repos","events_url":"https://api.github.com/users/bala-manoharan/events{/privacy}","received_events_url":"https://api.github.com/users/bala-manoharan/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/bala-manoharan/odp","description":"The ODP project is an open-source, cross-platform set of application programming interfaces (APIs) for the networking data plane","fork":true,"url":"https://api.github.com/repos/bala-manoharan/odp","forks_url":"https://api.github.com/repos/bala-manoharan/odp/forks","keys_url":"https://api.github.com/repos/bala-manoharan/odp/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bala-manoharan/odp/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bala-manoharan/odp/teams","hooks_url":"https://api.github.com/repos/bala-manoharan/odp/hooks","issue_events_url":"https://api.github.com/repos/bala-manoharan/odp/issues/events{/number}","events_url":"https://api.github.com/repos/bala-manoharan/odp/events","assignees_url":"https://api.github.com/repos/bala-manoharan/odp/assignees{/user}","branches_url":"https://api.github.com/repos/bala-manoharan/odp/branches{/branch}","tags_url":"https://api.github.com/repos/bala-manoharan/odp/tags","blobs_url":"https://api.github.com/repos/bala-manoharan/odp/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bala-manoharan/odp/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bala-manoharan/odp/git/refs{/sha}","trees_url":"https://api.github.com/repos/bala-manoharan/odp/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bala-manoharan/odp/statuses/{sha}","languages_url":"https://api.github.com/repos/bala-manoharan/odp/languages","stargazers_url":"https://api.github.com/repos/bala-manoharan/odp/stargazers","contributors_url":"https://api.github.com/repos/bala-manoharan/odp/contributors","subscribers_url":"https://api.github.com/repos/bala-manoharan/odp/subscribers","subscription_url":"https://api.github.com/repos/bala-manoharan/odp/subscription","commits_url":"https://api.github.com/repos/bala-manoharan/odp/commits{/sha}","git_commits_url":"https://api.github.com/repos/bala-manoharan/odp/git/commits{/sha}","comments_url":"https://api.github.com/repos/bala-manoharan/odp/comments{/number}","issue_comment_url":"https://api.github.com/repos/bala-manoharan/odp/issues/comments{/number}","contents_url":"https://api.github.com/repos/bala-manoharan/odp/contents/{+path}","compare_url":"https://api.github.com/repos/bala-manoharan/odp/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bala-manoharan/odp/merges","archive_url":"https://api.github.com/repos/bala-manoharan/odp/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bala-manoharan/odp/downloads","issues_url":"https://api.github.com/repos/bala-manoharan/odp/issues{/number}","pulls_url":"https://api.github.com/repos/bala-manoharan/odp/pulls{/number}","milestones_url":"https://api.github.com/repos/bala-manoharan/odp/milestones{/number}","notifications_url":"https://api.github.com/repos/bala-manoharan/odp/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bala-manoharan/odp/labels{/name}","releases_url":"https://api.github.com/repos/bala-manoharan/odp/releases{/id}","deployments_url":"https://api.github.com/repos/bala-manoharan/odp/deployments","created_at":"2017-05-09T00:27:18Z","updated_at":"2017-05-09T00:27:21Z","pushed_at":"2018-05-08T13:54:56Z","git_url":"git://github.com/bala-manoharan/odp.git","ssh_url":"git@github.com:bala-manoharan/odp.git","clone_url":"https://github.com/bala-manoharan/odp.git","svn_url":"https://github.com/bala-manoharan/odp","homepage":"http://www.opendataplane.org/","size":10268,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"Linaro:api-next","ref":"api-next","sha":"29cb860583cb906bc16eddf9a4c98d6bb37333e5","user":{"login":"Linaro","id":1180626,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExODA2MjY=","avatar_url":"https://avatars0.githubusercontent.com/u/1180626?v=4","gravatar_id":"","url":"https://api.github.com/users/Linaro","html_url":"https://github.com/Linaro","followers_url":"https://api.github.com/users/Linaro/followers","following_url":"https://api.github.com/users/Linaro/following{/other_user}","gists_url":"https://api.github.com/users/Linaro/gists{/gist_id}","starred_url":"https://api.github.com/users/Linaro/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Linaro/subscriptions","organizations_url":"https://api.github.com/users/Linaro/orgs","repos_url":"https://api.github.com/users/Linaro/repos","events_url":"https://api.github.com/users/Linaro/events{/privacy}","received_events_url":"https://api.github.com/users/Linaro/received_events","type":"Organization","site_admin":false},"repo":{"id":79130215,"node_id":"MDEwOlJlcG9zaXRvcnk3OTEzMDIxNQ==","name":"odp","full_name":"Linaro/odp","owner":{"login":"Linaro","id":1180626,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExODA2MjY=","avatar_url":"https://avatars0.githubusercontent.com/u/1180626?v=4","gravatar_id":"","url":"https://api.github.com/users/Linaro","html_url":"https://github.com/Linaro","followers_url":"https://api.github.com/users/Linaro/followers","following_url":"https://api.github.com/users/Linaro/following{/other_user}","gists_url":"https://api.github.com/users/Linaro/gists{/gist_id}","starred_url":"https://api.github.com/users/Linaro/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Linaro/subscriptions","organizations_url":"https://api.github.com/users/Linaro/orgs","repos_url":"https://api.github.com/users/Linaro/repos","events_url":"https://api.github.com/users/Linaro/events{/privacy}","received_events_url":"https://api.github.com/users/Linaro/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Linaro/odp","description":"The ODP project is an open-source, cross-platform set of application programming interfaces (APIs) for the networking data plane","fork":false,"url":"https://api.github.com/repos/Linaro/odp","forks_url":"https://api.github.com/repos/Linaro/odp/forks","keys_url":"https://api.github.com/repos/Linaro/odp/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Linaro/odp/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Linaro/odp/teams","hooks_url":"https://api.github.com/repos/Linaro/odp/hooks","issue_events_url":"https://api.github.com/repos/Linaro/odp/issues/events{/number}","events_url":"https://api.github.com/repos/Linaro/odp/events","assignees_url":"https://api.github.com/repos/Linaro/odp/assignees{/user}","branches_url":"https://api.github.com/repos/Linaro/odp/branches{/branch}","tags_url":"https://api.github.com/repos/Linaro/odp/tags","blobs_url":"https://api.github.com/repos/Linaro/odp/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Linaro/odp/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Linaro/odp/git/refs{/sha}","trees_url":"https://api.github.com/repos/Linaro/odp/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Linaro/odp/statuses/{sha}","languages_url":"https://api.github.com/repos/Linaro/odp/languages","stargazers_url":"https://api.github.com/repos/Linaro/odp/stargazers","contributors_url":"https://api.github.com/repos/Linaro/odp/contributors","subscribers_url":"https://api.github.com/repos/Linaro/odp/subscribers","subscription_url":"https://api.github.com/repos/Linaro/odp/subscription","commits_url":"https://api.github.com/repos/Linaro/odp/commits{/sha}","git_commits_url":"https://api.github.com/repos/Linaro/odp/git/commits{/sha}","comments_url":"https://api.github.com/repos/Linaro/odp/comments{/number}","issue_comment_url":"https://api.github.com/repos/Linaro/odp/issues/comments{/number}","contents_url":"https://api.github.com/repos/Linaro/odp/contents/{+path}","compare_url":"https://api.github.com/repos/Linaro/odp/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Linaro/odp/merges","archive_url":"https://api.github.com/repos/Linaro/odp/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Linaro/odp/downloads","issues_url":"https://api.github.com/repos/Linaro/odp/issues{/number}","pulls_url":"https://api.github.com/repos/Linaro/odp/pulls{/number}","milestones_url":"https://api.github.com/repos/Linaro/odp/milestones{/number}","notifications_url":"https://api.github.com/repos/Linaro/odp/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Linaro/odp/labels{/name}","releases_url":"https://api.github.com/repos/Linaro/odp/releases{/id}","deployments_url":"https://api.github.com/repos/Linaro/odp/deployments","created_at":"2017-01-16T15:11:12Z","updated_at":"2018-05-30T14:51:12Z","pushed_at":"2018-05-31T07:46:18Z","git_url":"git://github.com/Linaro/odp.git","ssh_url":"git@github.com:Linaro/odp.git","clone_url":"https://github.com/Linaro/odp.git","svn_url":"https://github.com/Linaro/odp","homepage":"http://www.opendataplane.org/","size":11334,"stargazers_count":44,"watchers_count":44,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":51,"mirror_url":null,"archived":false,"open_issues_count":9,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":51,"open_issues":9,"watchers":44,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Linaro/odp/pulls/580"},"html":{"href":"https://github.com/Linaro/odp/pull/580"},"issue":{"href":"https://api.github.com/repos/Linaro/odp/issues/580"},"comments":{"href":"https://api.github.com/repos/Linaro/odp/issues/580/comments"},"review_comments":{"href":"https://api.github.com/repos/Linaro/odp/pulls/580/comments"},"review_comment":{"href":"https://api.github.com/repos/Linaro/odp/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Linaro/odp/pulls/580/commits"},"statuses":{"href":"https://api.github.com/repos/Linaro/odp/statuses/4f1ca1494864d54b26289a94da6d89756214092d"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"psavol"}}