}
/** X.509 cache discarder */
-struct cache_discarder x509_cache_discarder __cache_discarder = {
+struct cache_discarder x509_discarder __cache_discarder ( CACHE_NORMAL ) = {
.discard = x509_discard,
};
#define CACHE_DISCARDERS __table ( struct cache_discarder, "cache_discarders" )
/** Declare a cache discarder */
-#define __cache_discarder __table_entry ( CACHE_DISCARDERS, 01 )
+#define __cache_discarder( cost ) __table_entry ( CACHE_DISCARDERS, cost )
+
+/** @defgroup cache_cost Cache discarder costs
+ *
+ * @{
+ */
+
+#define CACHE_CHEAP 01 /**< Items with a low replacement cost */
+#define CACHE_NORMAL 02 /**< Items with a normal replacement cost */
+#define CACHE_EXPENSIVE 03 /**< Items with a high replacement cost */
+
+/** @} */
#endif /* _IPXE_MALLOC_H */
return 0;
}
-/** ARP cache discarder */
-struct cache_discarder arp_cache_discarder __cache_discarder = {
+/** ARP cache discarder
+ *
+ * ARP cache entries are deemed to have a high replacement cost, since
+ * flushing an active ARP cache entry midway through a TCP transfer
+ * will cause substantial disruption.
+ */
+struct cache_discarder arp_discarder __cache_discarder ( CACHE_EXPENSIVE ) = {
.discard = arp_discard,
};
}
/** TCP cache discarder */
-struct cache_discarder tcp_cache_discarder __cache_discarder = {
+struct cache_discarder tcp_discarder __cache_discarder ( CACHE_NORMAL ) = {
.discard = tcp_discard,
};