void nas_acl_table::commit_create (bool rolling_back)
{
    if (!is_attr_dirty (BASE_ACL_TABLE_STAGE)) {
        throw nas::base_exception {NAS_ACL_E_CREATE_ONLY, __PRETTY_FUNCTION__,
            "Mandatory attribute Stage not present"};
    }

    if (!is_attr_dirty (BASE_ACL_TABLE_ALLOWED_MATCH_FIELDS)) {
        throw nas::base_exception {NAS_ACL_E_CREATE_ONLY, __PRETTY_FUNCTION__,
            "Mandatory attribute Allowed Match Fields not present"};
    }

    nas::base_obj_t::commit_create(rolling_back);
}
示例#2
0
void nas_acl_counter_t::set_type(uint_t type, bool reset)
{
    auto t = static_cast <BASE_ACL_COUNTER_TYPE_t> (type);

    if (!is_attr_dirty (BASE_ACL_COUNTER_TYPES)) {
        mark_attr_dirty (BASE_ACL_COUNTER_TYPES);
        _types_to_be_pushed.clear();

        if (reset) {
            _enable_byte_count = false;
            _enable_pkt_count = false;
        }
    }

    switch (t) {
        case BASE_ACL_COUNTER_TYPE_PACKET:
            _enable_pkt_count = true;
            break;
        case BASE_ACL_COUNTER_TYPE_BYTE:
            _enable_byte_count = true;
            break;
        default:
            throw nas::base_exception {NAS_ACL_E_ATTR_VAL, __PRETTY_FUNCTION__,
                  std::string {"Unknown Counter type "}
                  + std::to_string (t)};
            break;
    }
}
void derived_obj_t::commit_create (bool rolling_back)
{
    if (!is_attr_dirty (BASE_UT_ATTR1)) {
        throw nas::base_exception {NAS_BASE_E_PARAM, __PRETTY_FUNCTION__,
            "Mandatory attribute ATTR1 not present"};
    }

    nas::base_obj_t::commit_create(rolling_back);
}
void nas_acl_table::set_allowed_filter (uint_t filter_id)
{
    if (is_created_in_ndi()) {
        // Create-Only attribute
        throw nas::base_exception {NAS_ACL_E_CREATE_ONLY, __PRETTY_FUNCTION__,
                                "Cannot modify Filter-Set for Table"};
    }

    BASE_ACL_MATCH_TYPE_t f = static_cast <BASE_ACL_MATCH_TYPE_t> (filter_id);

    if (!nas_acl_filter_t::is_type_valid (f)) {
        throw nas::base_exception {NAS_ACL_E_ATTR_VAL, __PRETTY_FUNCTION__,
            std::string {"Unknown Table Match Field type "}
            + std::to_string (f)};
    }

    if (!is_attr_dirty (BASE_ACL_TABLE_ALLOWED_MATCH_FIELDS)) {
        mark_attr_dirty (BASE_ACL_TABLE_ALLOWED_MATCH_FIELDS);
        _allowed_filters.clear ();
    }

    _allowed_filters.insert(f);
}