diff options
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/dif_config.proto | 4 | ||||
| -rw-r--r-- | src/lib/irm.c | 8 | ||||
| -rw-r--r-- | src/lib/shm_rdrbuff.c | 117 | 
3 files changed, 35 insertions, 94 deletions
| diff --git a/src/lib/dif_config.proto b/src/lib/dif_config.proto index dbdf19e5..338634d1 100644 --- a/src/lib/dif_config.proto +++ b/src/lib/dif_config.proto @@ -7,8 +7,8 @@ message dif_config_msg {          optional uint32 pdu_length_size =  5;          optional uint32 qos_id_size     =  6;          optional uint32 seqno_size      =  7; -        optional uint32 ttl_size        =  8; -        optional uint32 chk_size        =  9; +        optional bool has_ttl           =  8; +        optional bool has_chk           =  9;          optional uint32 min_pdu_size    = 10;          optional uint32 max_pdu_size    = 11;          // Config for shim UDP diff --git a/src/lib/irm.c b/src/lib/irm.c index 64a4fa0f..fce11ba5 100644 --- a/src/lib/irm.c +++ b/src/lib/irm.c @@ -115,8 +115,8 @@ int irm_bootstrap_ipcp(pid_t               api,                  config.has_pdu_length_size = true;                  config.has_qos_id_size = true;                  config.has_seqno_size = true; -                config.has_ttl_size = true; -                config.has_chk_size = true; +                config.has_has_ttl = true; +                config.has_has_chk = true;                  config.has_min_pdu_size = true;                  config.has_max_pdu_size = true; @@ -125,8 +125,8 @@ int irm_bootstrap_ipcp(pid_t               api,                  config.pdu_length_size = conf->pdu_length_size;                  config.qos_id_size = conf->qos_id_size;                  config.seqno_size = conf->seqno_size; -                config.ttl_size = conf->ttl_size; -                config.chk_size = conf->chk_size; +                config.has_ttl = conf->has_ttl; +                config.has_chk = conf->has_chk;                  config.min_pdu_size = conf->min_pdu_size;                  config.max_pdu_size = conf->max_pdu_size;                  break; diff --git a/src/lib/shm_rdrbuff.c b/src/lib/shm_rdrbuff.c index 93a889ce..b0d295d9 100644 --- a/src/lib/shm_rdrbuff.c +++ b/src/lib/shm_rdrbuff.c @@ -690,32 +690,32 @@ int shm_rdrbuff_remove(struct shm_rdrbuff * rdrb, ssize_t idx)          return 0;  } -uint8_t * shm_du_buff_head_alloc(struct shm_rdrbuff * rdrb, -                                 ssize_t              idx, -                                 size_t               size) +uint8_t * shm_du_buff_head(struct shm_du_buff * sdb)  { -        struct shm_du_buff * sdb; -        uint8_t * buf; - -        if (rdrb  == NULL) +        if (sdb == NULL)                  return NULL; -        if (idx < 0 || idx > SHM_BUFFER_SIZE) +        return (uint8_t *) (sdb + 1) + sdb->du_head; +} + +uint8_t * shm_du_buff_tail(struct shm_du_buff * sdb) +{ +        if (sdb == NULL)                  return NULL; -#ifdef __APPLE__ -        pthread_mutex_lock(rdrb->lock); -#else -        if (pthread_mutex_lock(rdrb->lock) == EOWNERDEAD) { -                LOG_DBGF("Recovering dead mutex."); -                pthread_mutex_consistent(rdrb->lock); -        } -#endif -        sdb = idx_to_du_buff_ptr(rdrb, idx); +        return (uint8_t *) (sdb + 1) + sdb->du_tail; +} + +uint8_t * shm_du_buff_head_alloc(struct shm_du_buff * sdb, +                                 size_t               size) +{ +        uint8_t * buf = NULL; + +        if (sdb  == NULL) +                return NULL;          if ((long) (sdb->du_head - size) < 0) { -                pthread_mutex_unlock(rdrb->lock); -                LOG_DBGF("Failed to allocate PCI headspace."); +                LOG_ERR("Failed to allocate PCI headspace.");                  return NULL;          } @@ -723,37 +723,19 @@ uint8_t * shm_du_buff_head_alloc(struct shm_rdrbuff * rdrb,          buf = (uint8_t *) (sdb + 1) + sdb->du_head; -        pthread_mutex_unlock(rdrb->lock); -          return buf;  } -uint8_t * shm_du_buff_tail_alloc(struct shm_rdrbuff * rdrb, -                                 ssize_t              idx, +uint8_t * shm_du_buff_tail_alloc(struct shm_du_buff * sdb,                                   size_t               size)  { -        struct shm_du_buff * sdb; -        uint8_t * buf; - -        if (rdrb  == NULL) -                return NULL; +        uint8_t * buf = NULL; -        if (idx < 0 || idx > SHM_BUFFER_SIZE) +        if (sdb  == NULL)                  return NULL; -#ifdef __APPLE__ -        pthread_mutex_lock(rdrb->lock); -#else -        if (pthread_mutex_lock(rdrb->lock) == EOWNERDEAD) { -                LOG_DBGF("Recovering dead mutex."); -                pthread_mutex_consistent(rdrb->lock); -        } -#endif -        sdb = idx_to_du_buff_ptr(rdrb, idx); -          if (sdb->du_tail + size >= sdb->size) { -                pthread_mutex_unlock(rdrb->lock); -                LOG_DBGF("Failed to allocate PCI tailspace."); +                LOG_ERR("Failed to allocate PCI tailspace.");                  return NULL;          } @@ -761,78 +743,37 @@ uint8_t * shm_du_buff_tail_alloc(struct shm_rdrbuff * rdrb,          sdb->du_tail += size; -        pthread_mutex_unlock(rdrb->lock); -          return buf;  } -int shm_du_buff_head_release(struct shm_rdrbuff * rdrb, -                             ssize_t              idx, +int shm_du_buff_head_release(struct shm_du_buff * sdb,                               size_t               size)  { -        struct shm_du_buff * sdb; - -        if (rdrb  == NULL) -                return -1; - -        if (idx < 0 || idx > SHM_BUFFER_SIZE) +        if (sdb  == NULL)                  return -1; -#ifdef __APPLE__ -        pthread_mutex_lock(rdrb->lock); -#else -        if (pthread_mutex_lock(rdrb->lock) == EOWNERDEAD) { -                LOG_DBGF("Recovering dead mutex."); -                pthread_mutex_consistent(rdrb->lock); -        } -#endif - -        sdb = idx_to_du_buff_ptr(rdrb, idx); -          if (size > sdb->du_tail - sdb->du_head) { -                pthread_mutex_unlock(rdrb->lock); -                LOG_DBGF("Tried to release beyond sdu boundary."); +                LOG_DBGF("Tried to release beyond SDU boundary.");                  return -EOVERFLOW;          }          sdb->du_head += size; -        pthread_mutex_unlock(rdrb->lock); -          return 0;  } -int shm_du_buff_tail_release(struct shm_rdrbuff * rdrb, -                             ssize_t              idx, +int shm_du_buff_tail_release(struct shm_du_buff * sdb,                               size_t               size)  { -        struct shm_du_buff * sdb; - -        if (rdrb  == NULL) -                return -1; - -        if (idx < 0 || idx > SHM_BUFFER_SIZE) +        if (sdb  == NULL)                  return -1; -#ifdef __APPLE__ -        pthread_mutex_lock(rdrb->lock); -#else -        if (pthread_mutex_lock(rdrb->lock) == EOWNERDEAD) { -                LOG_DBGF("Recovering dead mutex."); -                pthread_mutex_consistent(rdrb->lock); -        } -#endif -        sdb = idx_to_du_buff_ptr(rdrb, idx); -          if (size > sdb->du_tail - sdb->du_head) { -                pthread_mutex_unlock(rdrb->lock); -                LOG_DBGF("Tried to release beyond sdu boundary."); +                LOG_ERR("Tried to release beyond SDU boundary.");                  return -EOVERFLOW;          }          sdb->du_tail -= size; -        pthread_mutex_unlock(rdrb->lock); -          return 0;  } | 
