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 * $FreeBSD$ 31 */ 32 33 #include <stdlib.h> 34 35 #include "hostres_snmp.h" 36 #include "hostres_oid.h" 37 #include "hostres_tree.h" 38 39 int 40 op_begemot(struct snmp_context *ctx, struct snmp_value *value, 41 u_int sub, u_int iidx __unused, enum snmp_op op) 42 { 43 44 switch (op) { 45 46 case SNMP_OP_GET: 47 switch (value->var.subs[sub - 1]) { 48 49 case LEAF_begemotHrStorageUpdate: 50 value->v.uint32 = storage_tbl_refresh; 51 return (SNMP_ERR_NOERROR); 52 53 case LEAF_begemotHrFSUpdate: 54 value->v.uint32 = fs_tbl_refresh; 55 return (SNMP_ERR_NOERROR); 56 57 case LEAF_begemotHrDiskStorageUpdate: 58 value->v.uint32 = disk_storage_tbl_refresh; 59 return (SNMP_ERR_NOERROR); 60 61 case LEAF_begemotHrNetworkUpdate: 62 value->v.uint32 = network_tbl_refresh; 63 return (SNMP_ERR_NOERROR); 64 65 case LEAF_begemotHrSWInstalledUpdate: 66 value->v.uint32 = swins_tbl_refresh; 67 return (SNMP_ERR_NOERROR); 68 69 case LEAF_begemotHrSWRunUpdate: 70 value->v.uint32 = swrun_tbl_refresh; 71 return (SNMP_ERR_NOERROR); 72 73 case LEAF_begemotHrPkgDir: 74 return (string_get(value, pkg_dir, -1)); 75 } 76 abort(); 77 78 case SNMP_OP_GETNEXT: 79 abort(); 80 81 case SNMP_OP_SET: 82 switch (value->var.subs[sub - 1]) { 83 84 case LEAF_begemotHrStorageUpdate: 85 ctx->scratch->int1 = storage_tbl_refresh; 86 storage_tbl_refresh = value->v.uint32; 87 return (SNMP_ERR_NOERROR); 88 89 case LEAF_begemotHrFSUpdate: 90 ctx->scratch->int1 = fs_tbl_refresh; 91 fs_tbl_refresh = value->v.uint32; 92 return (SNMP_ERR_NOERROR); 93 94 case LEAF_begemotHrDiskStorageUpdate: 95 ctx->scratch->int1 = disk_storage_tbl_refresh; 96 disk_storage_tbl_refresh = value->v.uint32; 97 return (SNMP_ERR_NOERROR); 98 99 case LEAF_begemotHrNetworkUpdate: 100 ctx->scratch->int1 = network_tbl_refresh; 101 network_tbl_refresh = value->v.uint32; 102 return (SNMP_ERR_NOERROR); 103 104 case LEAF_begemotHrSWInstalledUpdate: 105 ctx->scratch->int1 = swins_tbl_refresh; 106 swins_tbl_refresh = value->v.uint32; 107 return (SNMP_ERR_NOERROR); 108 109 case LEAF_begemotHrSWRunUpdate: 110 ctx->scratch->int1 = swrun_tbl_refresh; 111 swrun_tbl_refresh = value->v.uint32; 112 return (SNMP_ERR_NOERROR); 113 114 case LEAF_begemotHrPkgDir: 115 return (string_save(value, ctx, -1, &pkg_dir)); 116 } 117 abort(); 118 119 case SNMP_OP_COMMIT: 120 switch (value->var.subs[sub - 1]) { 121 122 case LEAF_begemotHrStorageUpdate: 123 case LEAF_begemotHrFSUpdate: 124 case LEAF_begemotHrDiskStorageUpdate: 125 case LEAF_begemotHrNetworkUpdate: 126 case LEAF_begemotHrSWInstalledUpdate: 127 case LEAF_begemotHrSWRunUpdate: 128 return (SNMP_ERR_NOERROR); 129 130 case LEAF_begemotHrPkgDir: 131 string_commit(ctx); 132 return (SNMP_ERR_NOERROR); 133 } 134 abort(); 135 136 case SNMP_OP_ROLLBACK: 137 switch (value->var.subs[sub - 1]) { 138 139 case LEAF_begemotHrStorageUpdate: 140 storage_tbl_refresh = ctx->scratch->int1; 141 return (SNMP_ERR_NOERROR); 142 143 case LEAF_begemotHrFSUpdate: 144 fs_tbl_refresh = ctx->scratch->int1; 145 return (SNMP_ERR_NOERROR); 146 147 case LEAF_begemotHrDiskStorageUpdate: 148 disk_storage_tbl_refresh = ctx->scratch->int1; 149 return (SNMP_ERR_NOERROR); 150 151 case LEAF_begemotHrNetworkUpdate: 152 network_tbl_refresh = ctx->scratch->int1; 153 return (SNMP_ERR_NOERROR); 154 155 case LEAF_begemotHrSWInstalledUpdate: 156 swins_tbl_refresh = ctx->scratch->int1; 157 return (SNMP_ERR_NOERROR); 158 159 case LEAF_begemotHrSWRunUpdate: 160 swrun_tbl_refresh = ctx->scratch->int1; 161 return (SNMP_ERR_NOERROR); 162 163 case LEAF_begemotHrPkgDir: 164 string_rollback(ctx, &pkg_dir); 165 return (SNMP_ERR_NOERROR); 166 } 167 abort(); 168 } 169 170 abort(); 171 } 172