1 /*- 2 * Copyright (c) 2005-2006. 3 * Hartmut Brandt. 4 * All rights reserved. 5 * 6 * Author: Hartmut Brandt <harti@freebsd.org> 7 * 8 * Redistribution of this software and documentation and use in source and 9 * binary forms, with or without modification, are permitted provided that 10 * the following conditions are met: 11 * 12 * 1. Redistributions of source code or documentation must retain the above 13 * copyright notice, this list of conditions and the following disclaimer. 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in the 16 * documentation and/or other materials provided with the distribution. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 19 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 22 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28 * SUCH DAMAGE. 29 */ 30 31 #include <stdlib.h> 32 33 #include "hostres_snmp.h" 34 #include "hostres_oid.h" 35 #include "hostres_tree.h" 36 37 int 38 op_begemot(struct snmp_context *ctx, struct snmp_value *value, 39 u_int sub, u_int iidx __unused, enum snmp_op op) 40 { 41 42 switch (op) { 43 44 case SNMP_OP_GET: 45 switch (value->var.subs[sub - 1]) { 46 47 case LEAF_begemotHrStorageUpdate: 48 value->v.uint32 = storage_tbl_refresh; 49 return (SNMP_ERR_NOERROR); 50 51 case LEAF_begemotHrFSUpdate: 52 value->v.uint32 = fs_tbl_refresh; 53 return (SNMP_ERR_NOERROR); 54 55 case LEAF_begemotHrDiskStorageUpdate: 56 value->v.uint32 = disk_storage_tbl_refresh; 57 return (SNMP_ERR_NOERROR); 58 59 case LEAF_begemotHrNetworkUpdate: 60 value->v.uint32 = network_tbl_refresh; 61 return (SNMP_ERR_NOERROR); 62 63 case LEAF_begemotHrSWInstalledUpdate: 64 value->v.uint32 = swins_tbl_refresh; 65 return (SNMP_ERR_NOERROR); 66 67 case LEAF_begemotHrSWRunUpdate: 68 value->v.uint32 = swrun_tbl_refresh; 69 return (SNMP_ERR_NOERROR); 70 71 case LEAF_begemotHrPkgDir: 72 return (string_get(value, pkg_dir, -1)); 73 } 74 abort(); 75 76 case SNMP_OP_GETNEXT: 77 abort(); 78 79 case SNMP_OP_SET: 80 switch (value->var.subs[sub - 1]) { 81 82 case LEAF_begemotHrStorageUpdate: 83 ctx->scratch->int1 = storage_tbl_refresh; 84 storage_tbl_refresh = value->v.uint32; 85 return (SNMP_ERR_NOERROR); 86 87 case LEAF_begemotHrFSUpdate: 88 ctx->scratch->int1 = fs_tbl_refresh; 89 fs_tbl_refresh = value->v.uint32; 90 return (SNMP_ERR_NOERROR); 91 92 case LEAF_begemotHrDiskStorageUpdate: 93 ctx->scratch->int1 = disk_storage_tbl_refresh; 94 disk_storage_tbl_refresh = value->v.uint32; 95 return (SNMP_ERR_NOERROR); 96 97 case LEAF_begemotHrNetworkUpdate: 98 ctx->scratch->int1 = network_tbl_refresh; 99 network_tbl_refresh = value->v.uint32; 100 return (SNMP_ERR_NOERROR); 101 102 case LEAF_begemotHrSWInstalledUpdate: 103 ctx->scratch->int1 = swins_tbl_refresh; 104 swins_tbl_refresh = value->v.uint32; 105 return (SNMP_ERR_NOERROR); 106 107 case LEAF_begemotHrSWRunUpdate: 108 ctx->scratch->int1 = swrun_tbl_refresh; 109 swrun_tbl_refresh = value->v.uint32; 110 return (SNMP_ERR_NOERROR); 111 112 case LEAF_begemotHrPkgDir: 113 return (string_save(value, ctx, -1, &pkg_dir)); 114 } 115 abort(); 116 117 case SNMP_OP_COMMIT: 118 switch (value->var.subs[sub - 1]) { 119 120 case LEAF_begemotHrStorageUpdate: 121 case LEAF_begemotHrFSUpdate: 122 case LEAF_begemotHrDiskStorageUpdate: 123 case LEAF_begemotHrNetworkUpdate: 124 case LEAF_begemotHrSWInstalledUpdate: 125 case LEAF_begemotHrSWRunUpdate: 126 return (SNMP_ERR_NOERROR); 127 128 case LEAF_begemotHrPkgDir: 129 string_commit(ctx); 130 return (SNMP_ERR_NOERROR); 131 } 132 abort(); 133 134 case SNMP_OP_ROLLBACK: 135 switch (value->var.subs[sub - 1]) { 136 137 case LEAF_begemotHrStorageUpdate: 138 storage_tbl_refresh = ctx->scratch->int1; 139 return (SNMP_ERR_NOERROR); 140 141 case LEAF_begemotHrFSUpdate: 142 fs_tbl_refresh = ctx->scratch->int1; 143 return (SNMP_ERR_NOERROR); 144 145 case LEAF_begemotHrDiskStorageUpdate: 146 disk_storage_tbl_refresh = ctx->scratch->int1; 147 return (SNMP_ERR_NOERROR); 148 149 case LEAF_begemotHrNetworkUpdate: 150 network_tbl_refresh = ctx->scratch->int1; 151 return (SNMP_ERR_NOERROR); 152 153 case LEAF_begemotHrSWInstalledUpdate: 154 swins_tbl_refresh = ctx->scratch->int1; 155 return (SNMP_ERR_NOERROR); 156 157 case LEAF_begemotHrSWRunUpdate: 158 swrun_tbl_refresh = ctx->scratch->int1; 159 return (SNMP_ERR_NOERROR); 160 161 case LEAF_begemotHrPkgDir: 162 string_rollback(ctx, &pkg_dir); 163 return (SNMP_ERR_NOERROR); 164 } 165 abort(); 166 } 167 168 abort(); 169 } 170