ในขณะที่ มีการบันทึกการแทนที่กฎอะตอม:
การแทนที่กฎอะตอม
คุณสามารถใช้ -ฉ
ตัวเลือกในการอัปเดตชุดกฎของคุณ:
ไฟล์ %nft -f
มันไม่ได้บันทึกไว้อย่างชัดเจนสำหรับ ธาตุ แทนที่ แต่นั่นเป็นเพียงกรณีของการเปลี่ยนกฎเท่านั้น หนึ่งสามารถลบและเพิ่มกลับองค์ประกอบในการทำธุรกรรมปรมาณูเดียวที่แนะนำด้วย -ฉ
: สิ่งนี้จะแทนที่รายการที่เก่ากว่าด้วยรายการที่ใหม่กว่าและเวลาหมดอายุที่อัปเดต โดยไม่ทำให้องค์ประกอบขาดหายไปชั่วคราว
แทนที่จะทำสิ่งต่อไปนี้ ซึ่งไม่ใช่ atomic เพราะระหว่างการเรียกใช้สองครั้งของ เอ็นเอฟที
องค์ประกอบจะไม่มีอยู่ชั่วคราวและกฎที่ขึ้นอยู่กับชุดนี้จะไม่ตรงกันชั่วคราว:
# nft ลบองค์ประกอบ ip mytable myset '{ 10.10.10.1 }'
# nft เพิ่มองค์ประกอบ ip mytable myset '{ 10.10.10.1 หมดเวลา 60 วินาที หมดอายุ 60 วินาที }'
สิ่งนี้ควรทำโดยใช้ -ฉ
และไฟล์อินพุต (-
ยืนหยัดเพื่อ สเตดิน นับเป็นไฟล์อินพุตที่ถูกต้อง):
# nft -f - <<'EOF'
ลบองค์ประกอบ ip mytable myset { 10.10.10.1 }
เพิ่มองค์ประกอบ ip mytable myset { 10.10.10.1 หมดเวลา 60 วินาที }
อฟ
โดยที่ธาตุจะไม่มีวันหมดไปเพราะเป็นการเปลี่ยนแปลงของอะตอม
เช่นเคยกับเรื่องนี้ เอ็นเอฟที สร้าง ถ้าใครต้องการทำสิ่งนี้โดยไม่จำเป็น โดยไม่ต้องรู้ว่ามีองค์ประกอบอยู่แล้วหรือไม่ และไม่กระทบกับองค์ประกอบอื่น ควรเพิ่ม ลบ และเพิ่มใหม่ เพราะการเพิ่มองค์ประกอบที่มีอยู่แล้วไม่ใช่ข้อผิดพลาด การลบ องค์ประกอบที่ขาดหายไปจะเป็นข้อผิดพลาด:
# nft -f - <<'EOF'
เพิ่มองค์ประกอบ ip mytable myset { 10.10.10.1 }
ลบองค์ประกอบ ip mytable myset { 10.10.10.1 }
เพิ่มองค์ประกอบ ip mytable myset { 10.10.10.1 หมดเวลา 60 วินาที }
อฟ
มันยังคงเป็นธุรกรรมปรมาณูเดียว
หมายเหตุเพิ่มเติม
จากเส้นทางแพ็คเก็ต
เมื่อทำสิ่งนี้จากเส้นทางแพ็กเก็ต จะมีความแตกต่างระหว่าง เพิ่ม @myset
ซึ่งจะตั้งค่าการหมดเวลาเฉพาะเมื่อสร้างองค์ประกอบใหม่ แต่จะไม่อัปเดตการหมดเวลาขององค์ประกอบที่มีอยู่แล้ว ทำให้สามารถหมดเวลาเกินระยะเวลาเต็มในภายหลัง และ อัปเดต @myset
ซึ่งจะกำหนดเวลาออกในทุกกรณี
การอัปเดตกฎอะตอมไม่ได้จำกัดเฉพาะธาตุ แต่สามารถใช้ได้ในระดับใดก็ได้
ตัวอย่างเช่น สามารถทำได้ในระดับที่ตั้งไว้หากมีองค์ประกอบเดียวที่ต้องดูแล:
# nft -f - <<'EOF'
เพิ่มชุด ip mytable myset { พิมพ์ ipv4_addr; หมดเวลาตั้งค่าสถานะ; }
ลบ set ip mytable myset
เพิ่มชุด ip mytable myset {
พิมพ์ ipv4_addr
หมดเวลาตั้งค่าสถานะ
องค์ประกอบ = { 127.0.0.1 หมดเวลา 1m }
}
อฟ
ตัวอย่างข้างต้นจริง ๆ แล้วน่าจะล้มเหลวเพราะอาจมีกฎที่อ้างอิงถึงชุด ดังนั้นจึงไม่อนุญาตให้ลบออกแม้ในระหว่างการทำธุรกรรม (ใคร ๆ ก็สามารถเขียนใหม่แทนทั้งตารางได้เช่นเดียวกัน เพิ่มตาราง ip mytable
, ลบตาราง ip mytable
, เพิ่มตาราง ip mytable { ...
). หากทราบว่าชุดนั้นมีอยู่ก่อน ให้ล้างชุดก่อนเพิ่มกลับองค์ประกอบเดียวก็เพียงพอแล้ว:
# nft -f - <<'EOF'
ฟลัชเซ็ต ip mytable myset
เพิ่มองค์ประกอบ ip mytable myset { 127.0.0.1 หมดเวลา 1m }
อฟ
แน่นอนว่าสามารถใช้ไฟล์จริงแทนได้ - <<'อีโอเอฟ'
...อฟ
.